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 J
la 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 J
con un I
, elimine todos los caracteres que no sean del alfabeto y divídalos en pares, usando un X
para separar cualquier par que contenga la misma letra dos veces. Si termina con un número impar de letras, agregue X
al 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
stdin
argumentos 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
XX
ocurra 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,
MASSACHUSETTS
debe cifrarse comoMA SX SA CH US ET TS
: el dobleS
debe dividirse, pero el dobleT
no.
J
" ¿Albergan sentimientos similares sobre APL?