Escreva um programa que use duas linhas de entrada e use a primeira como uma frase-chave para criptografar a segunda de acordo com a técnica de criptografia da Playfair.
A Wikipedia descreve a criptografia Playfair com mais detalhes , mas para evitar qualquer ambiguidade, aqui está um breve resumo:
1. Gere uma tabela de chaves:
Substitua todas as ocorrências de J
na frase-chave por I
e retire todos os caracteres que não sejam do alfabeto e caracteres repetidos. Insira em uma tabela de criptografia 5 × 5, preenchendo as células restantes com o restante do alfabeto (exceto J
; não gostamos J
).
Exemplo:
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 a mensagem a ser criptografada
Substitua todos J
por um I
, retire todos os caracteres que não sejam do alfabeto e divida-os em pares, usando a X
para quebrar qualquer par que contenha a mesma letra duas vezes. Se você terminar com um número ímpar de letras, adicione X
no final. (Nota: numerais tem que ser explicitada na íntegra - ONE
, TWO
,THREE
, etc. - mas você pode assumir isso já foi feito para você.)
Exemplo:
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. Criptografia
Criptografe cada par de letras por vez. Se eles estiverem em diferentes linhas e colunas da tabela de chaves, substitua cada um pela letra da mesma linha na coluna em que a outra letra é encontrada (por exemplo, VM
⇒ EI
, LZ
⇒ GQ
). Se eles estiverem na mesma linha (ou coluna), escolha os dois caracteres imediatamente à direita (ou abaixo), contornando, se necessário (por exemplo, OE
⇒ VR
, ZG
⇒ KP
).
Exemplo:
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
A cadeia produzida por esse processo é a mensagem criptografada, que seu programa deve gerar.
Regras:
- O texto e a chave de entrada podem ser obtidos em
stdin
argumentos de linha de comando ou em outras fontes. Entrada codificada não é permitida. - Seu programa deve aceitar texto em maiúsculas e minúsculas para a frase secreta e a mensagem.
- A saída criptografada pode ser maiúscula ou minúscula.
- Seu programa deve aceitar frases-chave de pelo menos 64 caracteres e textos de mensagens de pelo menos 16 KB.
- Você não precisa lidar com entrada não-ASCII.
- Você pode ignorar a possibilidade do par de letras
XX
ocorrer durante a criptografia. - Não há necessidade de adicionar espaço em branco à saída do programa.
- Sua resposta deve incluir um exemplo de mensagem, frase-chave e saída criptografada produzida pelo seu programa.
- Este é um desafio de código de golfe, portanto a resposta com o código mais curto (em bytes) vencerá.
NOTA: Lembre-se de que você só precisa quebrar letras consecutivas se elas aparecerem no mesmo par . Por exemplo,
MASSACHUSETTS
deve ser criptografado comoMA SX SA CH US ET TS
- o dobroS
deve ser dividido, mas o dobroT
não.
J
" Você nutre sentimentos semelhantes sobre o APL?