前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工具|Vigenere的暴力破解

工具|Vigenere的暴力破解

作者头像
漏斗社区
发布2018-03-28 15:20:41
11.8K99
发布2018-03-28 15:20:41
举报
文章被收录于专栏:漏斗社区

创作背景

之前参加了几次CTF比赛常常在Misc中遇到维吉尼亚密码破译的题目,大多是解出来了,但是痛点是都是手动分析进行解题,耽误了很多时间,最近想要解脱双手,潇洒解题~,于是广罗了各大比赛中维吉尼亚的解法,好多都是直接给出答案并未过多说明,解题思路和解题方法,于是诞生了本文,Thinking和大家聊聊的维吉尼亚密码破译,以及已收集到的一些解密脚本。

凯撒密码回顾

在说维吉尼亚密码前,首先复习下凯撒密码,大家都知道凯撒密码是比较简单的加密方式,仅仅将文中的每个字符位移相同的位移量(26个字母,所以位移数是-25—+25),但是这种方式容易被轻易的破译,密文较多的情况下可以通过字频统计,直接找出密文字母对应的明文,然后算出偏移量,对所有字符统一进行解密。

如下文,通过使用密码机器中的字频:

再根据常规的频统计表中可以知道,e,t,a,o,i,n这些字母在平时的语句中出现的评论较高,其中最高的是e,因此我们可以推测,密文->明文=g->e,并且位移数为2。

于是便解出了凯撒密码的明文信息。

维吉尼亚密码的介绍

维吉尼亚是凯撒密码的扩展,增加了秘钥的概念。以下是百度百科的例子:

未加密文字:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。(屠夫、面包师和蜡烛匠)。

关键密钥:BIG BIGBIGB IGB IGBIG BIG BIG BIGBIGBIGBI GBIGB

加密文字:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

因此在破译维吉尼亚密码时候重要的是要知道秘钥的长度,因为只要确定了秘钥长度,对维吉尼亚密码进行分解,分解后得到的便是多组凯撒密码。

以下例子来自limisky博客:

如密文为:ABCDEFGHIJKLMN

如果我们知道密钥长度为3,就可将其分解为三组:

组1:A D G J N

组2:B E H K

组3:C F I M

分解后每组就是一个凯撒密码,即组内的位移量是一致的,对每一组即可用频度分析法来解密。所以破解维吉尼亚密码的关键就是确定密钥的长度。

咱们一起PY吧

本来想说说手动分析和解密维吉尼亚密码的,后来想想,这样会让整个文章的篇幅变得冗长,失去了我的本意,所以直接略过手动分析,我们上PY,快速的将密码解出来。

首先贡献一个可以在线解维吉尼亚的网站:

https://www.guballa.de/vigenere-solver

又是对一件小事的思考,这个网站是将输入的密文按照规定的密码进行解密,解密的速度还很快,于是陷入了思考,或许维吉尼亚不应只按照常规的流程进行推算,应该也要有暴力枚举的功能,通过秘钥字典进行解密然后得到明文,再将明文中的单词与常见的英语单词进行匹配,当匹配率较高时,便确定解密的密码是正确的,输出明文信息。

当然只是一个小思考,然后在网上搜索这类暴力破解的文章,得到如下的py.以下PY用于比较解密后明文与常见单词进行匹配,words.txt中存放的是常见的英语单词。

以下PY实现读取keys.txt(存放秘钥的字典)中的秘钥,然后使用该秘钥进行解密。Ciphertext中放的是维吉尼亚的密文。

以下是运行后解密成功的结果:

创作心声

有些时候觉得解题或者做事很不方便,太繁琐了,就要多思考然后才能突破原有的思维局限,往往会有很多收获,把维吉尼亚的解码脚本以及之前手动解密的过程打包好了,大家可以关注漏洞社区,回复:I need more Thinking,就可以得到下载地址啦~!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏斗社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档