Kryptografia/zajecia3/2-RSA.py

44 lines
899 B
Python

# rsa
import sys, random
sys.path.append("../")
import functions.functions as fn
#generowanie kluczy
pierwsze = []
while True:
a = random.getrandbits(512)
if (fn.fermat(100, a)):
pierwsze.append(a)
if len(pierwsze) == 2:
break
n = pierwsze[0] * pierwsze[1]
fi = (pierwsze[0] - 1) * (pierwsze[1] - 1)
e = None
while True:
a = random.getrandbits(fi.bit_length() - 1)
if fn.fermat(100, a):
_, _, d = fn.euklides(a, fi)
if d == 1:
e = a
break
d = fn.odwrotnosc(e, fi)
print("\nKlucz publiczny: ({},\n {})".format(n, e))
print("\nKlucz tajny: ({}, {})".format(n, d))
#szyfrowanie
m = random.randint(1, 512)
print("\nWiadomośc: {}".format(m))
c = fn.potegowanieimod(m, e, n)
print("\nSzyfrogram: {}".format(c))
#odszyfrowanie
M = fn.potegowanieimod(c, d, n)
print("\nWiadomość odszyfrowana: {}\n".format(M))