嗯,我一直在做一个作业,它写道:
必须开发一个程序,并用C语言编写代码,才能破译用意大利语编写的使用密钥编码的文档。密钥是由所有大写字母、小写字母、数字和空格随机排列而得到的。例如,让我们考虑以下两个字符串:
Plain: “ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvwxyz0123456789 ”
Code: “BZJ9y0KePWopxYkQlRjhzsaNTFAtM7H6S24fC5mcIgXbnLOq8Uid 3EDv1ruVGw”密钥仅修改原始文档的字母、数字和空格,其余字符保持不变。文档存储在长度未知的文本文件中。
程序必须读取文档,使用合适的解码算法找到密钥(根据定义,该密钥是未知的;上表只是示例,并且它不是用于准备网络课程上可用的样本文件的密钥),并将解码后的文档写入新的文本文件。
我知道我必须上传一本英语词典到程序中,但我不知道为什么会有人问它(可能没有出现在该语句中,但我必须这样做)。我的问题是,虽然我可以使用简单的加密/解密算法来做这个程序,但是在我们的程序中上传英语词典有什么用呢?那么,有没有使用字典来解密加密算法的解密算法呢?或者有人能告诉我我应该使用什么方法或算法来解决这个问题?
如果您能尽早回复(也是真实的),我们将不胜感激。
谢谢你们。
发布于 2009-05-04 00:33:08
这是一个simple substitution cipher。它可以使用frequency analysis来打破。维基百科的文章详细解释了这两个概念。您需要做的是:
维基百科的第一篇文章链接到了实现上述所有功能的a set of tools。您只需要使用它,并可能使其适应您的用例。
发布于 2009-05-04 01:08:32
你的密码是替换密码。也就是说,它用一个字母替换另一个字母。
考虑一下密文
"yjr,1drv2ry1od1q1...“
我们可以使用字典来查找明文。
查找标点符号,因为空格总是跟在逗号后面,所以您可以找到空格的替换规则。
这给了你。"yjr,drv2ry od q...“
请注意单词长度。因为在英语中只有两个1字母的单词,Q可能是I或a。"yjr“可能是”为什么“、" the”、"how“等。
我们试着用结果来解释为什么
“为什么,dyv2yw od q...”
没有带两个y的英语单词,并且以w结尾。
所以我们尝试"the“并得到
"the,dev2et od q...“
我们得出结论,这是一个可能的答案。
现在,我们在字典中查找以?e??et开头的单词。
重复冲洗。
也就是说,找到一些适合可用长度的单词集,并且不破坏彼此的替换规则。
就我个人而言,我只是做上面建议的频率分析。
发布于 2009-05-04 01:41:19
正如其他两位受访者所说,频率分析是一种方法,你可以使用digram和trigram来使其更强。只需从网络上抓取大量的意大利语文本,然后继续前进!这真的是非常简单的编程。
https://stackoverflow.com/questions/818398
复制相似问题