SOLUCIÓN: Algoritmo Personalizado
MENSAJE CIFRADO
MbzKNclubnQRtOrgmQPnDwtspUfSNCFeqEMiyiVtFmIfGRbsGUzUimiaGvnzpBLfrvzWZimhylZZesgDaH QteTgbQokOheEoorrpaDoZgLhzmN bfwsFtokyCELaBogwfLAcXoNQKrhCVQJeMVqVMvPvjXEaRXHb QUNLzsvNZRUkGxoibzsTbVucNWdqsypsgjsg sUQykViZUrNuSAXRlZcvZoaxhnRhwJRuAcnHWpRTkkoletByjABhxowKdPVICknvFmDqKc yKhehypGnSniuttNWoWCpNEJxPNixzbDuDucRhsGtkWkdeaxYNDrRoubtRxeJAWFrpcQcIpYFQqWdkwpdEgVKANmIUObWyuAE davlhvBARQyiOptGCEJwVmfeaaJlCHTPazUylFSS
ALGORITMO DE CIFRADO
import random
def encrypt(plaintext, key):
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
ciphertext = ""
for i in range(0, len(plaintext)):
character = plaintext[i]
ciphertext = ciphertext + alphabet[(alphabet.index(character) + key) % len(alphabet)]
for j in range(0, key):
ciphertext = ciphertext + random.choice(alphabet)
return ciphertext
SOLUCIÓN SUGERIDA
1. El algoritmo de cifrado añade key
caracteres aleatorios después de cada carácter cifrado
2. Para descifrar, debemos saltar estos caracteres aleatorios y procesar solo cada (key + 1)
-ésimo carácter
3. La clave correcta es 11
, determinada mediante análisis del algoritmo
4. El proceso de descifrado invierte la operación de cifrado: resta la clave en lugar de sumarla
5. El algoritmo de descifrado debe procesar solo los caracteres relevantes, ignorando los aleatorios
ALGORITMO DE DESCIFRADO
def decrypt(ciphertext, key):
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
plaintext = ""
i = 0
while i < len(ciphertext):
character = ciphertext[i]
index = (alphabet.index(character) - key) % len(alphabet)
plaintext += alphabet[index]
i += key + 1
return plaintext
# Texto cifrado
ciphertext = "MbzKNclubnQRtOrgmQPnDwtspUfSNCFeqEMiyiVtFmIfGRbsGUzUimiaGvnzpBLfrvzWZimhylZZesgDaH QteTgbQokOheEoorrpaDoZgLhzmN bfwsFtokyCELaBogwfLAcXoNQKrhCVQJeMVqVMvPvjXEaRXHb QUNLzsvNZRUkGxoibzsTbVucNWdqsypsgjsg sUQykViZUrNuSAXRlZcvZoaxhnRhwJRuAcnHWpRTkkoletByjABhxowKdPVICknvFmDqKc yKhehypGnSniuttNWoWCpNEJxPNixzbDuDucRhsGtkWkdeaxYNDrRoubtRxeJAWFrpcQcIpYFQqWdkwpdEgVKANmIUObWyuAE davlhvBARQyiOptGCEJwVmfeaaJlCHTPazUylFS"
# Descifrar con clave 11
resultado = decrypt(ciphertext, 11)
print("Texto descifrado:")
print(resultado)
EXPLICACIÓN DEL ALGORITMO
- Caracteres aleatorios: Por cada carácter del texto original, se añaden
key
caracteres aleatorios - Patrón de lectura: Para descifrar, leemos un carácter cada
key + 1
posiciones - Operación inversa: Donde el cifrado suma la clave, el descifrado resta la clave
- Módulo del alfabeto: Se usa módulo para mantener los índices dentro del rango del alfabeto
- Clave correcta: El valor
11
se determinó mediante análisis del algoritmo y pruebas
LECCIONES DE SEGURIDAD
- Los algoritmos de cifrado personalizados suelen ser menos seguros que los estándares
- Añadir ruido (caracteres aleatorios) no necesariamente mejora la seguridad
- Es preferible usar algoritmos criptográficos estándar y bien probados
- La seguridad por oscuridad (ocultar el algoritmo) no es una práctica recomendada
- Los algoritmos criptográficos deben ser resistentes incluso cuando el atacante conoce el algoritmo