破解Vigenere加密法

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

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

而后就开始了苦逼的赶进度之路。利用各类碎片时间来看前几周的课,而且赶deadline。第一周的做业终于在deadline以前提交了。算法

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

第一周的编程做业是一个基于XOR的Vigenere加密法的破解。因为破解程序并不基于某种语言,因此我用JavaScript实现了一下,而且决定若是之后的做业尽可能也用JavaScript实现。个人答案在这里加密

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

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

我很喜欢这门课,但愿可以坚持上完整个专项课程。get

若是你对这个破解算法有兴趣的话,连接中的代码就是我所想要说的所有it

相关文章
相关标签/搜索