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