用Mathematica破解凯撒密码,如此简单!

1、经典密码简介

我看过的密码学书籍不多,能够看完的更是一本都没有,只是个纯业余纯外行的菜鸟。因此,基本上只能在在经典密码里玩耍。说到经典密码,凯撒密码是必须要说的,因为它被公认为最早的加密方式。

解凯撒密码:通过将字母表往后移动若干位,对明文进行加密。凯撒密码属于移位式密码,这种密码非常容易被破解,因为只要知道密文中某一个字母的原文是什么,就可以破解整个密文了。通常,下面的介绍的替换式密码也被认为是凯撒密码。

替换式密码:通过一一对应的方式,对明文进行加密。这种密码在古代还是有一定的安全性的,但计算机的出现后,它就弱爆了!仅通过字母的使用频率就能搞定它,再加上单词使用频率和单词长度等信息,可以很轻松地破解一份替换式密码。但如果密文很短的话,就难以破解了。比如,密文是“abcd”,满足这种形式的单词有3484个(含单复和动词时态变化等)!神知道他写的是哪个单词啊。

后来,又在替换式密码的基础上添加干扰信息。比如,将一个字母随机地对应到两个字母上,或在密文中随机修改几个字母。虽然这给破解增加了一些欢度,但本质上并没有改变密码的复杂度。

现代密码:在我理解中,现代密码是伴随计算机的诞生而不得不出现的产物。一是,密码应该有更强的复杂度,可以抵御高速计算机的分析破解、暴力破解;二是,由于网络的出现,需要很多新的加密需求,比如数字签名、验证等。

WinRAR:一款著名的解压缩软件,同时它也提供了加密功能。其使用AES-128加密技术,目前来说是非常安全的加密技术之一了。为了表示对WinRAR安全性的信赖,我将一段随机字符串通过WinRAR加密压缩。我承诺,将会请在2016年1月1日之前第一位破解的朋友喝咖啡。

附件:我好希望被解救.rar

2、破解替换式密码的例子

用字母频率破解,感觉好没技术性,而且还挺麻烦的。在Mma里,用Tally[Characters[MiMa]],就得到了密文的字母频率分布,再对照字母频率表差不多就能知道个大概了,然后就比较繁琐了。因为在一篇文章中,字母出现的频率又不是和频率表上的完全一致,这时就需要进行各种调整,各种繁琐!

当然,用Mma作字母频率表也很简单,用Mma中的范例数据ExampleData函数获取文本,再用上面的两个函数统计一下就OK了。

在Mma中有这样一个函数——DictionaryLookup,它可以查找给定规则的单词,比如:DictionaryLookup[“L” ~~ ___ ~~ “T”, IgnoreCase -> True],会给出所有以字母L开头以字母T结果的单词(忽略大小写);DictionaryLookup[a_ ~~ b_ ~~ b_ ~~ c_],会给出所有型如abbc的单词(例如:week,took,seem等)。

有了这么强大的函数,破解凯撒密码,就是在玩耍!

在Mma中函数ExampleData提供了大量的范例数据,仅文本数据就50个呢。这里用《物种起源》中的一小部分作为明文进行加密。

初步处理之后,密文基本上就现出原型了:

mima1

从上图结果中,找到未被替换的几个字母。比如“tfe”,通过函数:DictionaryLookup[“t” ~~ x_ ~~ “e”, IgnoreCase -> False],轻易断定字母F应该对应到H,其它类似。

mima2

 

 

好了,其它待定的字母也都找到原型了,下面是破解结果(注意,由于加密是随机替换,当你再运行该代码时,就不再是此处附加的替换喽)。

mima3

 


注:封面图片来自网络

About the Author

野鹤

自由学者,爱好广泛,虽无一精通,却常乐在其中...

本博客已停止更新,请您移步到我的新博客阅读更多文章。