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
|
||||
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))
|
||||
# jest w miniprojekt2
|
||||
|
Loading…
Reference in New Issue
Block a user