Scrivi un programma che prende due righe di input e usa la prima come frase chiave per crittografare la seconda secondo la tecnica di crittografia Playfair.
Wikipedia descrive la crittografia Playfair in alcuni dettagli , ma per evitare qualsiasi ambiguità, ecco un breve riassunto:
1. Generare una tabella di chiavi:
Sostituisci tutte le occorrenze J
nella frase chiave con I
, quindi rimuovi tutti i caratteri non alfabetici e i caratteri ripetuti. Inserisci in una tabella di crittografia 5 × 5, riempiendo le celle rimanenti con il resto dell'alfabeto (tranne J
; non ci piace J
).
Esempio:
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. Preparare il messaggio da crittografare
Sostituisci ogni J
con un I
, togli tutti i caratteri non alfabetici e dividi in coppie, usando un X
per spezzare due coppie che contengono la stessa lettera due volte. Se si finisce con un numero dispari di lettere, aggiungere X
alla fine. (Nota: I numeri devono essere scritto per esteso - ONE
, TWO
, THREE
, ecc - ma è possibile assumere questo è già stato fatto per voi.)
Esempio:
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. Crittografia
Crittografa ogni coppia di lettere a turno. Se si trovano in righe e colonne diverse della tabella delle chiavi, sostituirle ognuna con la lettera della stessa riga nella colonna in cui si trova l'altra lettera (ad esempio, VM
⇒ EI
, LZ
⇒ GQ
). Se si trovano nella stessa riga (o colonna), scegli i due caratteri immediatamente a destra (o in basso), avvolgendoli se necessario (ad esempio, OE
⇒ VR
, ZG
⇒ KP
).
Esempio:
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 stringa prodotta da questo processo è il messaggio crittografato, che il tuo programma dovrebbe generare.
Regole:
- Il testo e la chiave di input possono essere ottenuti da
stdin
argomenti della riga di comando o altre fonti simili. Non è consentito l'ingresso hardcoded. - Il programma deve accettare sia il testo in maiuscolo che il minuscolo per la passphrase e il messaggio.
- L'output crittografato può essere in maiuscolo o minuscolo.
- Il programma dovrebbe accettare frasi chiave di almeno 64 caratteri e testi di messaggi di almeno 16 KB.
- Non è necessario gestire input non ASCII.
- È possibile ignorare la possibilità che si
XX
verifichi la coppia di lettere durante la crittografia. - Non è necessario aggiungere spazi bianchi all'output del programma.
- La tua risposta dovrebbe includere un esempio di messaggio, frase chiave e output crittografato prodotto dal tuo programma.
- Questa è una sfida di golf del codice, quindi vincerà la risposta con il codice più breve (in byte).
NOTA: Ricorda che devi solo rompere le lettere consecutive se appaiono nella stessa coppia . Quindi, ad esempio,
MASSACHUSETTS
dovrebbe essere crittografato comeMA SX SA CH US ET TS
: il doppioS
deve essere diviso, ma il doppioT
no.
J
" Provi sentimenti simili su APL?