トラック
/
Haskell
Haskell
/
演習
/
アトバシュ暗号
アトバシュ暗号

アトバシュ暗号

中級

説明

アトバシュ暗号を実装してみましょう。アトバシュ暗号は、中東で生まれた古代の暗号方式です。

アトバシュ暗号は単純な換字式暗号で、アルファベットのすべての文字を並べ替えて、逆順のアルファベットにする仕組みです。最初の文字は最後の文字に、2番目の文字は後ろから2番目の文字に置き換わり、以下同様に続きます。

ラテン文字に対するアトバシュ暗号は、次のようになります。

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

鍵が1つしかなく、単純な単一換字式暗号であるため、非常に弱い暗号です。しかし、この暗号が使われていた時代には、問題にならなかったのかもしれません。

暗号文は固定長のグループに分けて書きます。伝統的なグループの長さは5文字で、数字はそのまま残し、句読点は取り除きます。これは、単語の区切りから内容を推測されにくくするためです。エンコードされるテキストは、すべて小文字になります。

例

  • testをエンコードするとgvhgになります
  • x123 yesをエンコードするとc123b vhになります
  • gvhgをデコードするとtestになります
  • gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwltをデコードするとthequickbrownfoxjumpsoverthelazydogになります

ヒント

decodeとencodeという関数を実装します。この2つの関数は、Atbash暗号を使ってStringをデコードおよびエンコードします。 型がわからないときは、用意されているシグネチャを使ってもかまいません。ただ、それに縛られて自由な発想を狭めないようにしましょう。

この演習ではテキストデータを扱います。歴史的な理由から、HaskellのString型は、文字のリストである[Char]と同じ意味を持ちます。テキストデータをより効率よく扱うには、Text型を使うこともできます。

この演習の任意の発展として、次のこともできます。

  • Haskellの文字列型について読むこと。
  • package.yamlの依存関係のリストに- textを追加すること。
  • Data.Textを次のようにインポートすること。
import qualified Data.Text as T
import           Data.Text (Text)
  • Text型を使うこと(例えばdecode :: Text -> Text)。また、Data.Textのコンビネーターは、例えばT.packのように参照すること。
  • Data.Textのドキュメントを調べること。
  • Atbash.hsの中にあるStringをすべてTextに置き換えること。つまり、次のとおりです。
decode :: Text -> Text
decode cipherText = ...

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

この部分は完全に任意です。


出典

Wikipediaリンクは新しいウィンドウまたはタブで開きます
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Haskell Exercism

アトバシュ暗号を始める準備はできましたか?

Exercismに登録すれば、107個の演習、そして本物の人間によるメンタリングとともに、Haskellを学んでマスターできます。すべて無料です。