旋轉密碼

旋轉密碼

中等

說明

建立旋轉密碼的實作,它有時也稱為凱薩密碼。

凱薩密碼是一種簡單的移位密碼,它會用介於0和26之間的整數金鑰,把字母表中所有字母位移。

由於模運算的關係,使用0或26當作金鑰時,永遠會得到相同的輸出。 字母會位移的量等於金鑰的值。

旋轉密碼的一般記法是ROT + <key>。 最常用的旋轉密碼是ROT13。

對拉丁字母套用ROT13會像這樣:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

它比埃特巴什密碼更強,因為它有 27 種可能的金鑰,以及 25 種可用的金鑰。

密文會以和輸入相同的格式寫出,包括空格和標點符號。

範例

  • ROT5:omg會得到trl
  • ROT0:c會得到c
  • ROT26:Cool會得到Cool
  • ROT13:The quick brown fox jumps over the lazy dog.會得到Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
  • ROT13:Gur dhvpx oebja sbk whzcf bire gur ynml qbt.會得到The quick brown fox jumps over the lazy dog.

提示

你需要實作rotate函式,它會接受一個Int和一個String,然後用旋轉密碼將它編碼。 如果對型別不太確定,可以使用提供的簽章,但別讓它限制你的創意。

這個練習處理的是文字資料。基於歷史因素,Haskell 的String型別等同於[Char],也就是字元的陣列。若要更有效率地處理文字資料,可以使用Text型別。

作為這個練習的選用延伸,你可以

  • 閱讀 Haskell 中關於字串型別的內容。
  • 在 package.yaml 的相依性清單中加入- text。
  • 用以下方式匯入Data.Text:
import qualified Data.Text as T
import           Data.Text (Text)
  • 使用Text型別,例如rotate :: Int -> Text -> Text,並以例如T.pack的方式取用Data.Text的組合子。
  • 查閱Data.Text的文件。
  • 把 RotationalCipher.hs 中所有出現的String都換成Text,也就是:
rotate :: Int -> Text -> Text

這個部分完全是選用的喔。


出處

Wikipedia連結會在新視窗或分頁中開啟
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Haskell Exercism

準備好開始 旋轉密碼 了嗎?

註冊 Exercism,透過 107 個練習 和真人引導來學習並精通 Haskell,全部免費。