學習軌道
/
Crystal
Crystal
/
練習
/
簡易加密法
簡易加密法

簡易加密法

中等

說明

建立維吉尼亞密碼的實作。 維吉尼亞密碼是一種簡單的替代式密碼。

密碼相關術語

密碼是一種用來加密(也就是編碼)字串的演算法。 未加密的字串稱為_明文_,加密後的字串則稱為_密文_。 把明文轉換成密文的過程稱為_編碼_,反之則稱為_解碼_。

在_替代式密碼_中,明文的每個字母都會被替換成另一個密文字母,而這個字母是透過_金鑰_計算出來的。 (注意,替換後的字母可能和原本的字母相同。)

編碼細節

在這個密碼中,金鑰是一串小寫字母,例如"abcd"。 明文的每個字母會根據金鑰中對應的字母,_位移_或_旋轉_一段距離。 金鑰中的"a"代表位移 0(也就是不位移)。 金鑰中的"b"代表位移 1。 金鑰中的"c"代表位移 2,依此類推。

明文的第一個字母對應金鑰的第一個字母,明文的第二個字母對應金鑰的第二個字母,依此類推。 如果金鑰的字母比明文先用完,就從金鑰開頭重新開始。

如果金鑰只包含一種字母,例如"dddddd",那麼明文的所有字母都會位移相同的距離(在這個例子中是 3),這就等同於循環位移密碼或位移密碼(有時稱為凱撒密碼)。 例如,明文"iamapandabear"會變成"ldpdsdqgdehdu"。

如果金鑰只包含字母"a"(出現一次或多次),位移距離就是 0,密文和明文相同。

不過,金鑰通常比這複雜得多! 如果金鑰是"abcd",明文的字母就會分別位移 0、1、2 和 3。 如果明文是"hello",我們需要 5 次位移,所以金鑰會循環回到開頭,位移距離依序是 0、1、2、3、0。 把這些位移套用到"hello"的字母上,就會得到"hfnoo"。

隨機金鑰

如果沒有提供金鑰,就產生一組金鑰,其中包含至少 100 個從拉丁字母中隨機取出的隨機小寫字母。

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

準備好開始 簡易加密法 了嗎?

註冊 Exercism,透過 26 個概念142 個練習 和真人引導來學習並精通 Crystal,全部免費。