维吉尼亚密码是一种多表替换密码,暴力破解相对来说比单表置换密码难一些。在网上找基于重合互指数法的破解代码,java、python都有,本菜鸟只有c++用的相对熟练一点,就用c++写了暴力破解过程。代码耗时提高效率什么的暂没考虑。
维吉尼亚方阵是26*26的方阵,第一行代表明文字母,第一列代表密钥字母,每一行都是一个凯撒加密。
在只知道密文的情况下想要破解维吉尼亚加密,首先要确定密钥的长度。
确定密钥长度有两种方式:
1.Kasiski测试法
搜索长度至少为2的相邻的一对对相同的密文段,记下它们之间的距离。而密钥长度d可能就是这些距离的最大公因子。
2.重合指数法
公式:
代码:
void Miyaolenth(char c[])
{
int klen=1; //密钥长度
int clen=strlen(c); //密文的长度
while(1)
{
float IC[klen]; //重合指数
float avgIC=0; //平均重合指数
for(int i=0;i<klen;i++) //统计分组字母个数
{
int o