首页/文章/ 详情

使用Python破解维吉尼亚密码

4年前浏览3128

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

加解密原理

选择一串密钥,这个密钥可以是数字也可以是字母。一般来说使用字母,因为这样密钥便于记忆。原文和密钥都可以被表示为数字的形式,具体规则是这个字母在字母表中的次序,比如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科技工作室。

Abaqus
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-04-04
最近编辑:4年前
320科技工作室
硕士 | 结构工程师 lammps/ms/vasp/
获赞 222粉丝 346文章 304课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈