Untitled

 avatar
unknown
plain_text
a month ago
1.3 kB
4
Indexable
from Crypto.Cipher import Salsa20
from Crypto.Hash import Poly1305
from Crypto.Random import get_random_bytes

# 🔹 Claves
key = get_random_bytes(32)
nonce = get_random_bytes(8)

# 🔹 Cifrado con Salsa20
plaintext = b"Mensaje seguro con autenticación"
cipher = Salsa20.new(key=key, nonce=nonce)
ciphertext = cipher.encrypt(plaintext)

# 🔹 Crear MAC con Poly1305
mac_key = get_random_bytes(32)  # Clave para Poly1305
poly = Poly1305.new(key=mac_key)
poly.update(nonce + ciphertext)
auth_tag = poly.digest()

# 🔹 Transmitimos (nonce, ciphertext, auth_tag)
transmitted_data = nonce + ciphertext + auth_tag

# 🔹 Verificación en el receptor
received_nonce = transmitted_data[:8]
received_ciphertext = transmitted_data[8:-16]
received_auth_tag = transmitted_data[-16:]

# Verificar autenticidad con Poly1305
poly = Poly1305.new(key=mac_key)
poly.update(received_nonce + received_ciphertext)
if poly.digest() == received_auth_tag:
    print("✅ Mensaje auténtico")
    cipher = Salsa20.new(key=key, nonce=received_nonce)
    decrypted_text = cipher.decrypt(received_ciphertext)
    print("🔓 Texto descifrado:", decrypted_text.decode())
else:
    print("❌ Mensaje alterado o autenticación fallida")
Editor is loading...
Leave a Comment