miniprojekt2
This commit is contained in:
parent
695672a7dd
commit
21c395201a
56
miniprojekt2/1-ElGamal.py
Normal file
56
miniprojekt2/1-ElGamal.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import sys, random, math
|
||||||
|
sys.path.append("../")
|
||||||
|
|
||||||
|
import functions.functions as fn
|
||||||
|
|
||||||
|
# Generowanie kluczy
|
||||||
|
# 1. Znajdź liczbę pierwszą
|
||||||
|
p = None
|
||||||
|
while True:
|
||||||
|
a = random.getrandbits(512)
|
||||||
|
if (fn.fermat(100, a)):
|
||||||
|
p = a
|
||||||
|
break
|
||||||
|
|
||||||
|
# 2. Znajdź generator g grupy fi(p)
|
||||||
|
# Generatorem grupy fi(p) jest dowolna liczba względnie pierwsza z p
|
||||||
|
# Jeśli p jest liczbą pierwszą to jest to dowolna liczba od 2 do p-1
|
||||||
|
|
||||||
|
g = random.randint(2, p-1)
|
||||||
|
|
||||||
|
|
||||||
|
# 3. Losuje liczbę naturalną 1 < x < p-1
|
||||||
|
x = random.randint(2, p-2)
|
||||||
|
|
||||||
|
|
||||||
|
# 4. Obliczam
|
||||||
|
y = fn.potegowanieimod(g, x, p)
|
||||||
|
|
||||||
|
print("\n\nKlucz publiczny = ( {}, {}, {} )\n\n".format(p, g, y))
|
||||||
|
print("Klucz prywatny = ( {}, {} )\n\n".format(p, x))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Szyfrowanie
|
||||||
|
# 1. Ustalam M
|
||||||
|
m = 12345
|
||||||
|
#m = random.randint(0, p-1)
|
||||||
|
|
||||||
|
|
||||||
|
# 2. Losuje liczbę naturalną 1 < z < p-1
|
||||||
|
z = random.randint(2, p-2)
|
||||||
|
|
||||||
|
|
||||||
|
# 3. Oblicza c1 i c2
|
||||||
|
c1 = fn.potegowanieimod(g, z, p)
|
||||||
|
c2 = fn.potegowanieimod(y, z, p) * m
|
||||||
|
|
||||||
|
print("C = [ {}, {} ]\n\n".format(c1, c2))
|
||||||
|
|
||||||
|
|
||||||
|
# Deszyfrowanie
|
||||||
|
d = int(c2 / fn.potegowanieimod(c1, x, p))
|
||||||
|
|
||||||
|
|
||||||
|
print("WIADOMOŚĆ: {}\n\n".format(d))
|
44
miniprojekt2/2-RSA.py
Normal file
44
miniprojekt2/2-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))
|
29
miniprojekt2/4-faktoryzacja.py
Normal file
29
miniprojekt2/4-faktoryzacja.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import random, math
|
||||||
|
|
||||||
|
n = random.getrandbits(50)
|
||||||
|
print(n)
|
||||||
|
|
||||||
|
k = 2
|
||||||
|
pom = math.sqrt(n)
|
||||||
|
factors = [1]
|
||||||
|
i = 1
|
||||||
|
d = -1
|
||||||
|
while n > 1 and k <= pom:
|
||||||
|
while n % k == 0:
|
||||||
|
n = n // k
|
||||||
|
factors.append(k)
|
||||||
|
if k < 3:
|
||||||
|
k += 1
|
||||||
|
else:
|
||||||
|
k = 6 * i + d
|
||||||
|
if d == 1:
|
||||||
|
d = -1
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
d = 1
|
||||||
|
|
||||||
|
if len(factors) == 0:
|
||||||
|
factors.append(n)
|
||||||
|
|
||||||
|
print(factors)
|
||||||
|
|
@ -1,44 +1 @@
|
|||||||
# rsa
|
# jest w miniprojekt2
|
||||||
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))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user