Path: blob/master/souper_strong_primes/solve.py
650 views
#!/usr/bin/env python212# warning: this script takes like 10 minutes to run3# be prepared for it to take a while4# also: sudo apt-get install libgmp-dev libmpc-dev5# pip install gmpy267# thanks py28from __future__ import print_function910import binascii11import datetime12import gmpy21314with open('new_n.txt') as f:15n = int(f.read())16with open('new_e.txt') as f:17e = int(f.read())18with open('new_c.txt') as f:19c = int(f.read())2021# calculate p, q22p = gmpy2.isqrt(n)23q = p + 22425# calculate d26totn = (p-1) * (q-1)27d = gmpy2.invert(e, totn)2829# calculate dp, dq, qinv30dp = d % (p-1)31dq = d % (q-1)32qinv = gmpy2.invert(p, q)3334# decryption! takes a long time35print(1, datetime.datetime.now())36m1 = gmpy2.powmod(c, dp, p)37print(2, datetime.datetime.now())38m2 = gmpy2.powmod(c, dq, q)39print(3, datetime.datetime.now())40h = (qinv * (m1 - m2)) % p41print(4, datetime.datetime.now())42m = m2 + h * q4344# decode it (why in binary who knows)45x = str(m)46x = '0' * (-len(x) % 8) + x47x = hex(int(x, 2)).lstrip('0x').rstrip('L')48x = '0' * (-len(x) % 2) + x49print(binascii.unhexlify(x))505152