古典密码——vigenre多表代换密码

加密

vigenre密码根据包含26张字符对应表的vigenre方阵(见文末图)来实现对字符串的加密,我们将每一行视为一张密码表,其基本加密过程如下:

假设我们需要加密的明文为:**h**ello**c**ipher**w**orld(由于这个表只有小写字母,暂时只加密包含小写字母的明文)

  1. 确定一个由字符组成的**,如: cipher(**用于确定加密明文的某个字符时使用哪一张密码表)

  2. 加密第一个字符h,使用**第一个字符c,查表第h列,第c行字符为j,所以h被加密为j

  3. 加密第二个字符e,使用**的第二个字符i,查表第e列,第i行字符为m,所以e被加密为m

  4. 由于**比明文短(当然这是不安全的不过反正这个密码现在也谈不上安全了),我们在加密明文第7个字符(i)时需要循环使用**cipher,即查表第i列,第c行字符为k,所以i被加密为k

  5. 按照这个方法即可完成加密,结果为jmasstkxwlvnqzak

解密

解密过程同样是查表

  1. 密文第一个字符为j,**第一个字符为c,查第c行中的j字符对应的是第h列,所以明文为

  2. 密文较**长时循环使用**完成解密

已知明文**

大家可以看出加密过程是根据行,列索引查找矩阵中字符的过程,解密过程是根据行索引矩阵中的字符查找列索引的过程,而已知明文**是根据列索引矩阵中的字符查找行索引的过程,由于vigenre矩阵的对称性,解密过程和已知明文**过程其实是一样的。

以上的python的代码实现参见https://gitee.com/JanuaryJIAN/codes/4k7tvbx6ydf1q9uzws23h77#0-qzone-1-38010-d020d2d2a4e8d1a374a433f596ad1440

古典密码——vigenre多表代换密码