From 21c395201ae97010bc598fb8d29569b7c387c1f2 Mon Sep 17 00:00:00 2001 From: Jakub Adamski Date: Wed, 24 Nov 2021 23:47:52 +0100 Subject: [PATCH] miniprojekt2 --- miniprojekt2/1-ElGamal.py | 56 ++++++++++++++++++++++++++++++++++ miniprojekt2/2-RSA.py | 44 ++++++++++++++++++++++++++ miniprojekt2/4-faktoryzacja.py | 29 ++++++++++++++++++ zajecia3/rsa.py | 45 +-------------------------- 4 files changed, 130 insertions(+), 44 deletions(-) create mode 100644 miniprojekt2/1-ElGamal.py create mode 100644 miniprojekt2/2-RSA.py create mode 100644 miniprojekt2/4-faktoryzacja.py diff --git a/miniprojekt2/1-ElGamal.py b/miniprojekt2/1-ElGamal.py new file mode 100644 index 0000000..00d4804 --- /dev/null +++ b/miniprojekt2/1-ElGamal.py @@ -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)) \ No newline at end of file diff --git a/miniprojekt2/2-RSA.py b/miniprojekt2/2-RSA.py new file mode 100644 index 0000000..51a4ee3 --- /dev/null +++ b/miniprojekt2/2-RSA.py @@ -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)) \ No newline at end of file diff --git a/miniprojekt2/4-faktoryzacja.py b/miniprojekt2/4-faktoryzacja.py new file mode 100644 index 0000000..7286360 --- /dev/null +++ b/miniprojekt2/4-faktoryzacja.py @@ -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) + diff --git a/zajecia3/rsa.py b/zajecia3/rsa.py index 51a4ee3..09720ec 100644 --- a/zajecia3/rsa.py +++ b/zajecia3/rsa.py @@ -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)) \ No newline at end of file +# jest w miniprojekt2