使用Python破解维吉尼亚密码

维吉尼亚密码是一种经典的多表密码系统,原理是通过一系列的凯撒密码加密增加其破解难度。维吉尼亚使用起来非常简单,只需要指定一串移位序列即可。但破解起来却非常困难,被称为“不可破解的密码”。

加解密原理

选择一串密钥,这个密钥可以是数字也可以是字母。一般来说使用字母,因为这样密钥便于记忆。原文和密钥都可以被表示为数字的形式,具体规则是这个字母在字母表中的次序,比如A是序号是2,B的序号是3,以此类推。加密的原理就是将原文的值对应的用密钥进行凯撒密码加密。

举个例子:

密钥是WOLF

明文:THIS WORLD DOESNT NEED A HERO IT NEEDS A PROFESSIONAL

密钥:WOLF WOLFW OLFWOL FWOL F WOLF WO LFWOL F WOLFWOLFWOLF

密文:QWFY CUXRJ JUKYTZ TKKJ G NKXU OZ TKKJY G VXULKYYOUTGR

比如第一个字符是T,序号20,第一个字符对应的密钥是W,序号23,那么密文就应该是序号(20+23)mod26的字母,即Q。解密时只需要按照同样的顺序减回来即可。这种加密方式本质上是一系列的凯撒密码的组合,但是却让暴力破解几乎不可能。首先密钥的长度是不确定的,其次对于每一种密钥长度n,都有26^n种可能性。如果密钥长度超过10,就已经超过100万亿种可能性了。这样的加密方式毫无疑问是暴力破解的噩梦,即便机器的性能足够,也还有判断猜解结果是否正确的问题。

破解方法

毫无疑问,这是个强壮又好用的加密系统,但这并不意味着它是不可破解的。但是通常来说,我们只能破解比较长的,有意义的文本加密后的密文。这是因为我们需要使用一些关于英文文本一些统计数据。

对于破解,我们首先要解决两个问题:密钥长度,具体的密钥。

我们要首先猜解出正确的密钥长度,不然长度不对,再努力都是白费。

这一步我们通过计算每种密钥长度的重合指数(CI)来判断这样划分后的文本与常规英文文本的接近程度。

1.png

​选择重合指数最高的作为密钥长度,进行下一步猜解。一旦有了正确的密钥长度,可以说就已经成功了一半了。接下来是利用每个字母在英文中出现的频次,做字频分析去猜解实际的密钥。正常的英文文章的匹配词频的IC一般在0.065左右,理论上最接近0.065的密钥就最可能是正确密钥。

2.png

使用这个技巧,我们对于密钥长度内的每一列都循环计算26种移位的IC值,然后选择最接近0.065的。最终这一串最接近0.065的移位序列就是我们猜解的密钥。

下面附一个实战案例:

首先猜解秘钥长度,12和24的CI最高,24又是12的倍数关系,这代表这两个值非常有可能是秘钥长度。

3.png

假设长度为12,猜解key

4.png

5.png

破解成功!

最后,如果大家有编程相关需求欢迎通过微信公众号联系我们。

微信公众号:320科技工作室。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAE320

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值