实现 Atbash 密码,这是一种诞生于中东的古老加密系统。
Atbash 密码是一种简单的替换密码,它把字母表中所有字母的顺序颠倒过来,得到的字母表正好是倒序的。 第一个字母替换成最后一个字母,第二个替换成倒数第二个,依此类推。
针对拉丁字母表的 Atbash 密码如下:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
它是一种很弱的密码,因为只有一种可能的密钥,而且只是简单的单表替换密码。 不过,在它诞生的年代,这可能并不算问题。
密文按固定长度分组写出,传统上每组 5 个字母,数字保持不变,标点符号则被去掉。 这样做是为了让人更难根据单词边界来猜测内容。 所有文本都编码为小写字母。
test得到gvhg
x123 yes得到c123b vh
gvhg得到test
gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt得到thequickbrownfoxjumpsoverthelazydog
你需要实现decode和encode两个函数,这两个函数使用 Atbash 密码对String进行解码和编码。
如果你不确定类型,可以使用给出的签名,但不要让它限制你的创造力。
本练习处理的是文本数据。由于历史原因,Haskell 的String类型等同于[Char],也就是一个字符列表。若要更高效地处理文本数据,可以使用Text类型。
作为本练习的可选延伸,你可以
import qualified Data.Text as T
import Data.Text (Text)
Text类型,例如decode :: Text -> Text;并像T.pack那样引用Data.Text的组合子。Data.Text的文档。String都替换成Text,即:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
这部分完全是可选的。