請實作 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 = ...
這個部分完全是選用的。