Files
crypto2025/crypto-asimmetric/RSA-2/attack.py
2025-06-02 19:35:30 +02:00

57 lines
1.7 KiB
Python

from Cryptodome.Util.number import bytes_to_long
from Cryptodome.Util.number import isPrime
from Cryptodome.Util.number import getPrime
from Cryptodome.Util.number import getRandomInteger
from gmpy2 import next_prime
from gmpy2 import isqrt
# p = getPrime(512)
# q = next_prime(p)
# n = p*q
# c = print(pow(m, e, n))
def egcd(a, b):
if (a == 0):
return (b, 0, 1)
else:
g, y, x = egcd(b%a, a)
return (g, x - (b//a) * y, y)
e = 65537
n = 60509355275518728792864353034381323203712352065221533863094540755630035742080855136016830887120470658395455751858380183285852786807229077435165810022519265154399424311072791755790585544921699474779996198610853766677088209156457859301755313246598035577293799853256065979074343370064111263698164125580000165237
c = 44695558076372490838321125335259117268430036823123326565653896322404966549742986308988778274388721345811255801305658387179978736924822440382730114598169989281210266972874387657989210875921956705640740514819089546339431934001119998309992280196600672180116219966257003764871670107271245284636072817194316693323
a = b = isqrt(n)
b2 = pow(a,2) - n
i = 0
while True:
print("Iteration # ="+str(i))
if b2 == pow(b,2):
print("solution found")
break
else:
a+=1
b2 = pow(a,2) - n
b = isqrt(b2)
print("a = " + str(a))
print("b = " + str(b))
print("b2 = " + str(b2))
print("delta-->"+str(pow(b,2)-b2 % n))
i+=1
p = a+b
q = a-b
print(f"P={p}")
print(f"Q={q}")
phi = (p-1)*(q-1)
res = egcd(e, phi)
u = res[1]
decrypted = pow(c,u,n)
print(decrypted.to_bytes(decrypted.bit_length()//8+1,byteorder='big').decode())