diff --git a/rsa.py b/rsa.py new file mode 100644 index 0000000000000000000000000000000000000000..5f246b07f72a436c408d1b31360cd531d78c5567 --- /dev/null +++ b/rsa.py @@ -0,0 +1,128 @@ +import math +def compute_bachet_bezout(a, b): + r = [a, b] + x = [1, 0] + y = [0, 1] + q = [0, 0] + + # Computing + i = 1 + while r[i] > 0: + i += 1 + r.append(r[i - 2] % r[i - 1]) + q.append(int(r[i - 2] / r[i - 1])) + if r[i] > 0: + x.append(x[i - 2] - q[i] * x[i - 1]) + y.append(y[i - 2] - q[i] * y[i - 1]) + + return x[-1], y[-1] + +def modular_inverse(a, n): + coefficients = compute_bachet_bezout(a, n) + if a * coefficients[0] % n == 1: + return coefficients[0] % n + return None +def pgcd(a,b): + + if(b>a): + temp = a + a = b + b = temp + + return compute_bachet_bezout(a,b)[0] + +def get_q_p(n,e): + p = 2 + while True: + if n%p ==0: + q = n//p + return (p,q) + p +=1 + +def modular_pow(base, exponent, modulus): + if modulus == 1: + return 0 + result = 1 + base %= modulus + while exponent > 0: + if exponent % 2 == 1: + result = (result * base) % modulus + exponent = exponent >> 1 + base = (base * base) % modulus + return result + + +e = 5249 +n = 1653973759 +messages =( +1511395078, +260436590, +1630654276, +1190458520, +790492067, +515550941, +297140366, +755589582, +647075331, +1191707844, +901889430, +660956124, +1500654109, +984322720, +1275630738, +1244853107, +1445928913, +1312523810, +265093060, +933013993, +1375592761, +195866064, +534502441, +928270408, +166404031, +621272622, +1304987439, +905393335, +55120151, +772595721, +506609577, +1172751778, +162439707, +233959833, +1468937795, +1358701120, +901889430, +495995733, +1524090698, +1043509086, +934992314, +1545639379, +1061595897, +1348452679, +1135067876, +905393335, +621272622, +55120151, +233959833, +1220119699, +708711266, +517797467, +195866064, +1579814353, +412378626, +498875436, +445485200, +7656659 +); + +p, q = get_q_p(n,e) +d= modular_inverse(e,(p-1)*(q-1)) +result = "" +for x in messages: + tmp = modular_pow(x,d,n) + mBytes = tmp.to_bytes(tmp.bit_length(), byteorder="little") + result += mBytes.decode("utf-8") + +print(result) + +