2026. június 11., csütörtök

Polinomalapú komplex titkosítás

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