建立維吉尼亞密碼的實作。 維吉尼亞密碼是一種簡單的替代式密碼。
密碼是一種用來加密(也就是編碼)字串的演算法。 未加密的字串稱為_明文_,加密後的字串則稱為_密文_。 把明文轉換成密文的過程稱為_編碼_,反之則稱為_解碼_。
在_替代式密碼_中,明文的每個字母都會被替換成另一個密文字母,而這個字母是透過_金鑰_計算出來的。 (注意,替換後的字母可能和原本的字母相同。)
在這個密碼中,金鑰是一串小寫字母,例如"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 個從拉丁字母中隨機取出的隨機小寫字母。