Cifra Atbash

Cifra Atbash

Médio

Instruções

Cria uma implementação da cifra Atbash, um antigo sistema de encriptação criado no Médio Oriente.

A cifra Atbash é uma cifra de substituição simples que se baseia em transpor todas as letras do alfabeto de modo a que o alfabeto resultante fique ao contrário. A primeira letra é substituída pela última, a segunda pela penúltima, e assim sucessivamente.

Uma cifra Atbash para o alfabeto latino seria a seguinte:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

É uma cifra muito fraca porque só tem uma chave possível e é uma cifra de substituição monoalfabética simples. No entanto, isto pode não ter sido um problema na época da cifra.

O texto cifrado é escrito em grupos de comprimento fixo, sendo o tamanho tradicional do grupo de 5 letras, deixando os números inalterados, e a pontuação é excluída. Isto serve para tornar mais difícil adivinhar coisas com base nos limites das palavras. Todo o texto será codificado em letras minúsculas.

Exemplos

  • Codificar test dá gvhg
  • Codificar x123 yes dá c123b vh
  • Descodificar gvhg dá test
  • Descodificar gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt dá thequickbrownfoxjumpsoverthelazydog

Dicas

Tens de implementar as funções decode e encode, que descodificam e codificam uma String com uma cifra Atbash. Podes usar a assinatura fornecida se não tiveres a certeza dos tipos, mas não deixes que isso restrinja a tua criatividade.

Este exercício trabalha com dados textuais. Por razões históricas, o tipo String de Haskell é sinónimo de [Char], uma lista de carateres. Para um tratamento mais eficiente de dados textuais, podes usar o tipo Text.

Como extensão opcional deste exercício, podes

import qualified Data.Text as T
import           Data.Text (Text)
  • usar o tipo Text, por exemplo decode :: Text -> Text, e referir-te aos combinadores de Data.Text como, por exemplo, T.pack.
  • consultar a documentação de Data.Text.
  • substituir todas as ocorrências de String por Text no Atbash.hs, ou seja:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

Esta parte é totalmente opcional.


Fonte

WikipediaO link abre numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar Cifra Atbash?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.