这是我必须弄清楚的问题:
“消息已使用讨论的Vigenere加密方法进行加密 在课堂上,其密文EQNVZ已被截获。打破代码。假设 密钥长度与消息,消息和密钥相同 仅由大写字母组成。“
在python中有办法做到这一点吗?我知道有一种方法可以在python中创建一个密文,但有没有办法走另一条路?
答案 0 :(得分:10)
这是一个棘手的问题。如果"密钥与消息的长度相同"然后你有one-time pad隐藏除消息长度以外的所有内容。
答案 1 :(得分:2)
由于你的密文很短,所以最简单的方法就是蛮力:
def break_vignere(input, list_of_words):
for word in list_of_words:
crypt = vignere(word)
if crypt == input:
return word
return None
当然,如果我们在list_of_words
中找不到输入文本,它可能会失败。
答案 2 :(得分:0)
如果“EQNVZ”是整个密文,那么密钥也是5个大写字符,所以
from string import uppercase
from itertools import product, imap
for key in imap("".join, product(uppercase, repeat=5)):
if test(key):
break
将测试所有键,假设您有一个函数test()
,它检查明文是全部大写还是字典。