Escriba un programa que tome dos líneas de entrada y use la primera como una frase clave para encriptar la segunda de acuerdo con la técnica de encriptación de Playfair.
Wikipedia describe el cifrado de Playfair con cierto detalle , pero para evitar cualquier ambigüedad, aquí hay un breve resumen:
1. Genere una tabla clave:
Reemplace todas las apariciones de Jla frase clave con I, luego elimine todos los caracteres que no sean del alfabeto y los caracteres repetidos. Inserte en una tabla de cifrado de 5 × 5, llenando las celdas restantes con el resto del alfabeto (excepto J; no nos gusta J).
Ejemplo:
S T A C K
O V E R F
Stack Overflow --> STACKOVERFLW --> L W B D G
H I M N P
Q U X Y Z
2. Prepare el mensaje para ser encriptado
Reemplace cada Jcon un I, elimine todos los caracteres que no sean del alfabeto y divídalos en pares, usando un Xpara separar cualquier par que contenga la misma letra dos veces. Si termina con un número impar de letras, agregue Xal final. (Nota: los números se deben detallar por completo - ONE,TWO ,THREE , etc - pero se puede suponer que esto ya se ha hecho por ti.)
Ejemplo:
In:
The cat crept into the crypt, crapped, and crept out again.
Out:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
3. Cifrado
Cifre cada par de letras a su vez. Si están en diferentes filas y columnas de la tabla de claves, reemplace cada una con la letra de la misma fila en la columna donde se encuentra la otra letra (por ejemplo, VM⇒ EI, LZ⇒ GQ). Si están en la misma fila (o columna), elija los dos caracteres inmediatamente a la derecha (o debajo), envolviéndolos si es necesario (por ejemplo, OE⇒ VR, ZG⇒KP ).
Ejemplo:
In:
TH EC AT CR EP TI NT OT HE CR YP TC RA PX PE DA ND CR EP TO UT AG AI NX
Out:
SI RA CA RD FM VU IC VS MO RD ZN AK EC MZ MF BC YN RD FM SV TV KB TM MY
La cadena producida por este proceso es el mensaje cifrado, que su programa debería generar.
Reglas:
- El texto de entrada y la clave se pueden obtener de
stdinargumentos de línea de comandos u otras fuentes similares. La entrada codificada no está permitida. - Su programa debe aceptar texto en mayúsculas y minúsculas para la frase de paso y el mensaje.
- La salida cifrada puede ser mayúscula o minúscula.
- Su programa debe aceptar frases clave de al menos 64 caracteres de longitud y mensajes de texto de al menos 16 KB.
- No es necesario que maneje entradas que no sean ASCII.
- Puede ignorar la posibilidad de que el par de letras
XXocurra durante el cifrado. - No es necesario agregar espacios en blanco a la salida del programa.
- Su respuesta debe incluir un ejemplo de mensaje, frase clave y salida cifrada producida por su programa.
- Este es un desafío de código de golf, por lo que la respuesta con el código más corto (en bytes) ganará.
NOTA: Recuerde que solo necesita romper letras consecutivas si aparecen en el mismo par . Entonces, por ejemplo,
MASSACHUSETTSdebe cifrarse comoMA SX SA CH US ET TS: el dobleSdebe dividirse, pero el dobleTno.
J" ¿Albergan sentimientos similares sobre APL?