from Crypto.Util.number import * from secret import flag import gmpy2
assertlen(flag) == 47
f = bytes_to_long(flag) p = getPrime(512) g = getPrime(128) h = gmpy2.invert(f, p) * g % p
print('h =', h) print('p =', p)
""" h = 9848463356094730516607732957888686710609147955724620108704251779566910519170690198684628685762596232124613115691882688827918489297122319416081019121038443 p = 11403618200995593428747663693860532026261161211931726381922677499906885834766955987247477478421850280928508004160386000301268285541073474589048412962888947 """
b = 2 ** 0#有时候需要调整b的值 flag = b'flag{Do_you_like_Laooooooo00000ooottice?Addoil}' print(len(flag)) f = bytes_to_long(flag) print(f.bit_length()) p = getPrime(512) g = getPrime(128) g = g
#行列式的值 temp = gmpy2.iroot(2 * b * p, 2)[0] print(temp.bit_length())
defGaussLatticeReduction(v1, v2): whileTrue: if v2.norm() < v1.norm(): v1, v2 = v2, v1 m = round( v1*v2 / v1.norm()^2 ) if m == 0: return (v1, v2) v2 = v2 - m*v1
h = 9848463356094730516607732957888686710609147955724620108704251779566910519170690198684628685762596232124613115691882688827918489297122319416081019121038443 p = 11403618200995593428747663693860532026261161211931726381922677499906885834766955987247477478421850280928508004160386000301268285541073474589048412962888947 c = 6388077150013017095358415295704360631706672647932184267739118115740221804173068089559645506533240372483689997499821300861865955720630884024099415936433339512125910973936154713306915269365877588850574948033131161679256849814325373882706559635563285860782658950169507940368219930971600522754831612134153314448445006958300840618894359885321144158064446236744722180819829183828290798747455324761671198097712539900569386477647697973195787663298318786718012522378981137877863153067057280649127202971806609339007027052518049995341356359016898069863799529357397514218249272201695539181908803360181347114492616706419618151757 print(h.nbits(),p.nbits()) D = 2^256#配平数与位数相关 需要学习补充 237-256次方均可解 # Construct lattice. v1 = vector(ZZ, [1, D * h]) v2 = vector(ZZ, [0, D * p]) m = matrix([v1,v2]);