Az alábbi Python program a polinomos titkosítás egy elterjedt szemléltető formáját valósítja meg: a titkos üzenetet karakterenként egy polinom f(x) behelyettesítési értékeként kódolja és dekódolja egy megadott p prímszám modulus használatával
-----------------------------
import random
def generate_key(degree):
"""
Polinom kulcs generálása: [a_n, a_{n-1}, ..., a_1, a_0]
"""
return [random.randint(1, 50) for _ in range(degree + 1)]
def evaluate_polynomial(poly, x, modulus):
"""
Polinom kiértékelése Horner-módszerrel modulo p
"""
result = 0
for coeff in poly:
result = (result * x + coeff) % modulus
return result
def encrypt_message(message, poly, modulus):
"""
Üzenet titkosítása polinom alapokon.
Minden karakterhez tartozik egy egyedi x érték.
"""
ciphertext = []
for i, char in enumerate(message):
char_val = ord(char)
# Egyedi x koordináta az üzenet pozíciója alapján
x = i + 1
# y = P(x) mod modulus
y = evaluate_polynomial(poly, x, modulus)
# A titkosított értékpár (x, y)
ciphertext.append((x, (y + char_val) % modulus))
return ciphertext
def decrypt_message(ciphertext, poly, modulus):
"""
Üzenet visszafejtése az eredeti polinom és a megadott modulus segítségével.
"""
decrypted_chars = []
for x, encrypted_val in ciphertext:
# Visszaszámoljuk a P(x) értéket
y = evaluate_polynomial(poly, x, modulus)
# Kivonjuk a polinom értékét a titkosított y-ból
original_char_val = (encrypted_val - y) % modulus
decrypted_chars.append(chr(original_char_val))
return "".join(decrypted_chars)
# --- Példa a használatra ---
# 1. Beállítások
degree = 3 # A polinom foka
modulus = 256 # Modulus (ASCII karakterekhez ideális)
message = "TitkosUzenet"
# 2. Kulcs generálása (Titkos polinom együtthatói)
secret_polynomial_key = generate_key(degree)
print(f"Generált polinom együtthatói: {secret_polynomial_key}")
# 3. Titkosítás
encrypted = encrypt_message(message, secret_polynomial_key, modulus)
print(f"\nTitkosított adatok (koordináták):\n{encrypted}")
# 4. Visszafejtés
decrypted = decrypt_message(encrypted, secret_polynomial_key, modulus)
print(f"\nVisszafejtett üzenet:\n{decrypted}")
-----------------
Nincsenek megjegyzések:
Megjegyzés küldése