存档一些未解的RSA
1
from Crypto.Util.number import *
import random
rp = getPrime(int(22))
rq = getPrime(int(22))
expo = 2
def gen_prime(expo, r):
while True:
temp = random.getrandbits(512)
prime = temp ** expo + r
if isPrime(prime) and prime.bit_length() == 1024 and r < 2*temp**(expo//2):
return prime
p = gen_prime(expo, rp)
q = gen_prime(expo, rq)
N = p * q
e = 65537
print(2**512)
p = 2**512
print(int(22))
"""
rp = 2761901
rq = 3521341
N = 8173429571237662356174233212574237281236998322542031650592594000891217669517413120500967497159244942348919067278693976689821859501087450019648230509709850347452324917093790301921127612493160209440437151319899297108532561169489425336409144924829832598843960688066486385145035210137687912003224734049803067433867707061772684826069508323572784775026848012706590657701751696891266472810511785676911545335741922767714438974823662929237575578695019172902410190335369556100506389008308623507470571466550018151809818826697222772408182010868119265594161444787149236612545056615010167331621709873102985291078241888304225882829
c = 6554138766974173272710144648183504398065698784167774773317718988434462828799287233285624061164660513258962823179912342327844671108808332129449156312310273679584167590425419252200727139421539687306609425624304225214120321941886252869436713943300790736667897627797614987266193848818485307859417445578102219563876798765702350608858252252678318853952926930729175117874307966329617938829619268459168088842722041471147579581400725208411779803070123511693579859690831873136147414357525140485188770396726712964444601480021916230402939070817964700309571887644154422478649510166353979404316364679398748317299695684951369875031
"""
exp
from Crypto.Util.number import *
import random
import gmpy2
from z3 import *
from tqdm import tqdm
rp = 2761901
rq = 3521341
N = 8173429571237662356174233212574237281236998322542031650592594000891217669517413120500967497159244942348919067278693976689821859501087450019648230509709850347452324917093790301921127612493160209440437151319899297108532561169489425336409144924829832598843960688066486385145035210137687912003224734049803067433867707061772684826069508323572784775026848012706590657701751696891266472810511785676911545335741922767714438974823662929237575578695019172902410190335369556100506389008308623507470571466550018151809818826697222772408182010868119265594161444787149236612545056615010167331621709873102985291078241888304225882829
C = 6554138766974173272710144648183504398065698784167774773317718988434462828799287233285624061164660513258962823179912342327844671108808332129449156312310273679584167590425419252200727139421539687306609425624304225214120321941886252869436713943300790736667897627797614987266193848818485307859417445578102219563876798765702350608858252252678318853952926930729175117874307966329617938829619268459168088842722041471147579581400725208411779803070123511693579859690831873136147414357525140485188770396726712964444601480021916230402939070817964700309571887644154422478649510166353979404316364679398748317299695684951369875031
e = 65537
x = N - (rp * rq)
tptq = int(gmpy2.iroot(N, 2)[0])
for i in (range(rp, rq + 1)):
alpha = (tptq - i) ** 2
beta = N - alpha - (rp * rq)
a = rq
b = -beta
c = alpha * rp
delta = (b ** 2) - (4 * a * c)
if delta >= 0:
sq_delta = gmpy2.iroot(delta, 2)
if sq_delta[1]:
fenz = sq_delta[0] - b
if fenz % (2 * a) == 0:
x = fenz // (2 * a)
y = alpha // x
if (x + rp) * (y + rq) != N:
x, y = y, x
p = x + rp
q = y + rq
assert p * q == N
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
m = pow(C, d, N)
print(long_to_bytes(m))
exit()