1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| from Crypto.Util.number import * import gmpy2 with open('out.txt') as f: n=int(f.readline()[4:]) p=eval(f.readline()[4:]) s=eval(f.readline()[4:]) c=eval(f.readline()[4:])
P0=1 L=[] for i in p: P0=P0*i print(P0)
for i in range(15): t=inverse(P0//p[i],p[i]) L.append(t*(P0//p[i]))
B=getPrime(3211) M=matrix(ZZ,15*15+1,15*15+1) for i in range(15): for j in range(15): t=i*15+j M[t+1,t+1]=B M[t+1,0]=s[i][j]*L[i] M[0,0]=P0 x=M.LLL() print("LLL done") d=0 for i in range(15): d =(d ^^ int(x[i][0])) d = gmpy2.next_prime(int(d)) print(d) print(long_to_bytes(pow(c,d,n)))
|