破解Vigenere加密法

scaret

前一阵子参加了Coursera的课程关爱生命--实用急救与自救技能。很不好意思地说,这是我完成的第一门MOOC课程。我顺利地完成了课程。截至目前,该门课程的成绩还没出,但是我按照所公布的成绩算法,我应该会获得94.6分。这还是我漏交了第一周作业之后的成绩。

完成这门课的信心让我决定参加一个专项课程:Cybersecurity。幸运地发现Cryptography课正在进行,并且第二天就要停止接受Signature Track了,果断交钱报了名。

然后就开始了苦逼的赶进度之路。利用各种碎片时间来看前几周的课,并且赶deadline。第一周的作业终于在deadline之前提交了。

=========================== 我是正文的分割线 ===============================

第一周的编程作业是一个基于XOR的Vigenere加密法的破解。由于破解程序并不基于某种语言,所以我用JavaScript实现了一下,并且决定如果以后的作业尽量也用JavaScript实现。我的答案在这里

这类移位加密算法是非常好破解的。首先,如果密钥长度为1的话,如果密钥取值在ASCII上,可能性就只有256种。增加密钥长度只会线性增加破解难度,因为每隔密钥长度个位置把明文抽出,这些明文实际上是同一个密钥位加密的——这又退化到了密钥长度为1的情况。然后再加上大多数明文落在ASCII的32~128这个区间上,并且字母比较多,再加上自然英语的字母出现概率分布,就能够把明文猜到七七八八了。对于这题而言,还有其他一些线索,比如我会猜首字母是大写,最后一位会是一个标点符号,每几位就会出现空格,而且名文中大概会出现Cryptography和Coursera之类的单词(虽然破解的时候并没有用到这些线索)。

这次作业吸引我的地方在于,我还真是第一次着手写代码来破解这个加密算法。破解古典密码的原理其实我老早就知道了,如同上段所说的,“这里有漏洞,这里有破绽,这里比较弱,所以可以很容易地……”,但真的写起代码来,才会对这些结论有更贴切的认识。“破解一个加密算法,我真的行吗?”即使在清楚一切细节的情况下,我也不大会做这种尝试,除非是“啊啊啊啊啊后天就要交作业了怎么办怎么办”作为压力。写代码的时候我感到又回到了大学时候赶死线的情况。写完所有代码,明文在一瞬间出现在眼前的时候,我好像又回到了电脑上第一次出现Hello World的激动中。

我很喜欢这门课,希望能够坚持上完整个专项课程。

如果你对这个破解算法有兴趣的话,链接中的代码就是我所想要说的全部

阅读 4.7k

536 声望
14 粉丝
0 条评论
536 声望
14 粉丝
文章目录
宣传栏