miniprojekt2

This commit is contained in:
Jakub Adamski 2021-11-24 23:47:52 +01:00
parent 695672a7dd
commit 21c395201a
4 changed files with 130 additions and 44 deletions

56
miniprojekt2/1-ElGamal.py Normal file
View 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
View 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))

View 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)

View File

@ -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