工具|Vigenere的暴力破解

创作背景

之前参加了几次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,就可以得到下载地址啦~!

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2017-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

C++字节流与二进制字符串相互转换(一个简单的明文加解密程序)

作为一名程序猿,在我们写文章、文字片段或者一句简短的话语,对外发表或者告之他人时,是否想过带点新意和创意呢?如果想过,那么这篇文章会给你一点帮助。

13720
来自专栏JackieZheng

如何写出好代码

如何写出好代码 这个题目把我自己都看傻了,因为仔细想想,这不是一个命题,是对代码的思考,对细节的推敲和打磨。写好代码是一门学问,还是一种修行。 以前是公众号(...

23850
来自专栏ACM算法日常

过山车(匈牙利算法)- HDU 2063

输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数。0<K<=1000 1<=N 和M<=500.接下来的K行,每行有...

27610
来自专栏小樱的经验随笔

CTF---密码学入门第六题 古典密码

古典密码分值:10 来源: 北邮天枢战队 难度:易 参与人数:5115人 Get Flag:1549人 答题人数:1783人 解题通过率:87% 密文内容如...

33590
来自专栏JAVA高级架构

七夕情人节,程序员怎样表白更有效?

七夕情人节快乐 2017.08.28 今天是传统节日--七夕节,也是中国人传统意义上的"情人节",在此祝大家开心。然后,各大平台又被七夕节刷屏了... 作为国...

1.1K60
来自专栏从流域到海域

《笨办法学python》 第14课手记

《笨办法学Python》 第14课手记 本节课将argv和raw_input和起来使用,作者在之前说,这个组合是个蛮顺手的用法。请注意,引入argv并使用arg...

247100
来自专栏算法channel

问答记录贴 1 | 解析 NumPy 的广播(broadcasting)机制

实践出真知,相互讨论碰撞出思想的火花。【原创互助答疑群】内有的问答很精彩。于是脑子里闪现出一个想法,为什么不把整个的问答过程记录总结下来,分享给更多的小伙伴呢?...

12510
来自专栏猿人谷

如何养成良好的c++编程习惯(1)——内存管理

开篇导读   “养成良好的编程习惯”其实是相当综合的一个命题,可以从多个角度、维度和层次进行论述和评判。如代码的风格、效率和可读性;模块设计的灵活 性、可扩展性...

33850
来自专栏YoungGy

ML基石_8_NoiseAndError

recap Noise and Probabilistic Target noise来源 Probabilistic Target Error Measure ...

20350
来自专栏C语言及其他语言

[每日一题]恺撒密码(1214)

这是一个关于凯撒的悲伤的故事。。。。。。 题目描述 恺撒生活在充满危险和阴谋的时代. 恺撒面对的最困难的问题是生存. 为了生存, 他决定创造一种密码. 这种...

32450

扫码关注云+社区

领取腾讯云代金券