44 lines
899 B
Python
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)) |