好吧,我一直在研究一个分配,它说:
必须开发一个程序,并用C语言编写,以破译写入的文档 意大利语,使用密钥编码。秘密密钥是随机获得的 所有大写字母,小写字母,数字和空格的排列。如 例如,让我们考虑以下两个字符串:
Plain: “ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvwxyz0123456789 ”
Code: “BZJ9y0KePWopxYkQlRjhzsaNTFAtM7H6S24fC5mcIgXbnLOq8Uid 3EDv1ruVGw”
密钥仅修改原始文档的字母,数字和空格 其余字符保持不变。该文档存储在一个文本文件中 长度未知。
程序必须读取文档,找到密钥(根据定义,它是 未知;上表只是一个例子,它不是用于准备的关键 网络课程中可用的样本文件)使用合适的解码算法,并写入 将解码后的文档转换为新的文本文件。
而且我知道我必须在程序中上传一本英文字典,但我不知道为什么会这样(可能不是在那个声明中,但我必须这样做)。我的问题是,虽然我可以使用简单的加密/解密算法来完成该程序,那么在我们的程序中上传英语词典的用途是什么?那么有没有使用字典来解密加密算法的解密算法?或者有人可以告诉我应该用什么方法或算法来解决这个问题?
我们将非常感谢您的早期回复(以及真实回复)。
谢谢你们。
答案 0 :(得分:8)
这是simple substitution cipher。它可以使用frequency analysis打破。维基百科文章彻底解释了这两个概念。你需要做的是:
第一篇维基百科文章链接到实现上述所有内容的a set of tools。您只需要使用并可能使其适应您的用例。
答案 1 :(得分:1)
您的密码是替换密码。那就是用一个字母代替另一个字母。
考虑密文
“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。
的单词冲洗重复。
也就是说,找到一些符合可用长度的单词,不要破坏彼此的替换规则。
就个人而言,我只是做上面建议的频率分析。
答案 2 :(得分:0)
正如其他受访者所说,频率分析是可行的方法,您可以使用数字和三元组来强化它。只需从网上抓取大量的意大利文字,然后前进!这是非常简单的编程。