加密
vigenre密码根据包含26张字符对应表的vigenre方阵(见文末图)来实现对字符串的加密,我们将每一行视为一张密码表,其基本加密过程如下:
假设我们需要加密的明文为:hellocipherworld(由于这个表只有小写字母,暂时只加密包含小写字母的明文)
确定一个由字符组成的密钥,如: cipher(密钥用于确定加密明文的某个字符时使用哪一张密码表)
加密第一个字符h,使用密钥第一个字符c,查表第h列,第c行字符为j,所以h被加密为j
-
加密第二个字符e,使用密钥的第二个字符i,查表第e列,第i行字符为m,所以e被加密为m
...
由于密钥比明文短(当然这是不安全的不过反正这个密码现在也谈不上安全了),我们在加密明文第7个字符(i)时需要循环使用密钥cipher,即查表第i列,第c行字符为k,所以i被加密为k
按照这个方法即可完成加密,结果为jmasstkxwlvnqzak
解密
解密过程同样是查表
-
密文第一个字符为j,密钥第一个字符为c,查第c行中的j字符对应的是第h列,所以明文为
...
密文较密钥长时循环使用密钥完成解密
已知明文破解
大家可以看出加密过程是根据行,列索引查找矩阵中字符的过程,解密过程是根据行索引和矩阵中的字符查找列索引的过程,而已知明文破解是根据列索引和矩阵中的字符查找行索引的过程,由于vigenre矩阵的对称性,解密过程和已知明文破解过程其实是一样的。
以上具体代码实现(python)参见https://gitee.com/JanuaryJIAN/codes/4k7tvbx6ydf1q9uzws23h77