1. 程式人生 > >NOIP 2012 提高組 Vigenère密碼

NOIP 2012 提高組 Vigenère密碼

16世紀法國外交家Blaise de Vigenère設計了一種多表密碼加密演算法——Vigenère密碼。Vigenère密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為南軍所廣泛使用。 
在密碼學中,我們稱需要加密的資訊為明文,用M表示;稱加密後的資訊為密文,用C表示;而金鑰是一種引數,是將明文轉換為密文或將密文轉換為明文的演算法中輸入的資料,記為k。 在Vigenère密碼中,金鑰k是一個字母串,k=k1k2…kn。當明文M=m1m2…mn時,得到的密文C=c1c2…cn,其中ci=(mi-'A'+ki-'A')mod26+'A',運算?的規則如下表所示:
Vigenere加密在操作時需要注意: 
1. ?運算忽略參與運算的字母的大小寫,並保持字母在明文M中的大小寫形式; 
2. 當明文M的長度大於金鑰k的長度時,將金鑰k重複使用。