zajecia3
This commit is contained in:
parent
e0c2e94698
commit
695672a7dd
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
__pycache__
|
51
functions/functions.py
Normal file
51
functions/functions.py
Normal file
@ -0,0 +1,51 @@
|
||||
import random, copy
|
||||
|
||||
#sprawdza czy liczby są pierwsze
|
||||
def fermat(dokladnosc, liczba):
|
||||
i = 0
|
||||
while i < dokladnosc:
|
||||
a = random.randint(1, liczba - 1)
|
||||
if pow(a, (liczba - 1), liczba) == 1:
|
||||
i = i + 1
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
||||
#x * u + N * v = d
|
||||
#Jeśli d == 1 to liczby są względnie pierwsze
|
||||
#d to NWD
|
||||
def euklides(x, N):
|
||||
A,B,U,V = N, x, 0, 1
|
||||
while True:
|
||||
q = A // B
|
||||
A_new = copy.deepcopy(B)
|
||||
B = A - B * q
|
||||
A = A_new
|
||||
U_new = copy.deepcopy(V)
|
||||
V = U - V * q
|
||||
U = U_new
|
||||
if B == 0:
|
||||
break
|
||||
d, u = A, U
|
||||
v = (d - x * u)/N
|
||||
return u, v, d
|
||||
|
||||
|
||||
#liczba odwrotna do b w modulo n
|
||||
def odwrotnosc(b, n):
|
||||
u, _, d = euklides(b, n)
|
||||
if d == 1:
|
||||
return u % n
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
#potegowanie x do k w mod n
|
||||
def potegowanieimod(x, k, n):
|
||||
y = 1
|
||||
while k > 0:
|
||||
if k & 1:
|
||||
y = y*x % n
|
||||
x = x**2 % n
|
||||
k = k >> 1
|
||||
return y
|
44
zajecia3/rsa.py
Normal file
44
zajecia3/rsa.py
Normal file
@ -0,0 +1,44 @@
|
||||
# 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))
|
14
zajecia3/testowe.py
Normal file
14
zajecia3/testowe.py
Normal file
@ -0,0 +1,14 @@
|
||||
import sys
|
||||
sys.path.append("../")
|
||||
|
||||
import functions.functions as fn
|
||||
|
||||
c = 1194024449148901642095200097870055737741645764394744155318695645194596220391443343197027572364026243089002152070134768229865572977202072275964098840721025876961903699837107178456937960769036226808529625975259747392533732677170542802757258980865413340360159618466950580761168296729593382939093152458632579807462168306693685058458109946909424522629476866018486300768172119332072738020220096063821408769836161596668177421022164759936875707676886053295432123403900793891136494095488406192842296217375007110677424647572379883138029436045378765616434346276790888927916404956009509484434114877972302768109847
|
||||
|
||||
d = 44172166664316348618184176869841529130125229257274245655212364632114548140974575751803935492101214210349057569007558651942740773243587655474183506994622943062602636333215858034182100779227210047231793514705323804472916623002482317841498373311321562419819278686569667913165742033122259784921734617682
|
||||
|
||||
n = 3490883977143252259982384869391866343672985433713547441739689121492674315619580156830620326021421471792926011913651839538684958739735100518286394257159090517265115820506822274157397650474074752645311314258176271561685463992191717804891559250609466279443046524956709382997523640335221229619946221067286482010901829387658904241388693494999300615059965292460448560270456473127070077286237984616794336775697861678085567236666894286408386466385344576002768829158953193122127573651343254040156954992093901684632064068184042356933091345978630925116597494256095547989334592457862346351113558398240600445500393
|
||||
|
||||
|
||||
M = fn.potegowanieimod(c, d, n)
|
||||
print("\nWiadomość odszyfrowana: {}\n".format(M))
|
Loading…
Reference in New Issue
Block a user