Blog

解密辅助工具

我们的密码学课程的作业之一就是老师给你一段字母拼成的文字,单词已经划分好了,每个字母都代表另外一个字母,让你翻译成原文。翻译的方法是通过找出一些特殊的部分,不如两个相同字母结尾的单词、单字母单词之类的,来找出更多的字母。对于这种方法的难处,我在之前的文章里有过描述。其中也说了我要写个工具来帮我干这个事情。今天用Ruby简单的写了这么一个。放在了这里

经过测试,程序能按照我的想法来做事。比如那篇文章里说的SKYQD一词,我有了arge结尾后,怎么也想不到large这个词。有了这个工具,运行match.rb SKYQD | grep arge就可以了返回large了,应该会给我的工作有很大帮助。程序的原理也很简单:对于SKYQD,先把它处理成一个标准的模式──ABCDE(更好的例子是HYTOOW,处理成标准模式后是ABCDDE)。然后再从保存了处理成标准模式的英文单词的Hash中查找就可以了。我是Ruby初学者,因此写的代码也没有什么优化,应该也挺罗唆。

目前这个程序有几个问题。

一是程序中上来先把我之前获得的英文单词都处理成我要的模式,这样每次运行都来一遍,应该挺废时间。我在想说不定把处理完毕的Hash保存起来可能会更有效率。

二是我目前的单词列表非常不够。我目前的单词列表是在这篇文章里说的,通过一个小程序在一个网站上抓取的所谓“常用单词3000字”。有很多单词都却是,因此我得到的常常就是Not Found。我无法在网上找到非常全面的单词列表,因此可能要写个程序从网络上解析网页抓单词。因为我们的这些句子经常是老师从Winnipeg Free Press上得到的,如果能把这个网站上用到的单词都作为程序的基础,那么破解起来应该会更方便。

第三点就有点提高了。目前这个程序只是按照我的要求来寻找合适的单词,并不能更进一步帮助我。如果能把我的单词列表中的单词都配上一些属性,通过人工智能上的一些技术来做进一步的筛选的话,应该会更方便。我在一年前学《人工智能》的时候,有一项作业是用Prolog来写一个检验一句话是否符合日本俳句的标准。如果能结合这两点,让程序帮忙整句的筛选,那就更理想了。

没有评论

Leave a Reply