无键求解vigenere代码-python

无键求解vigenere代码-python,python,encryption,vigenere,Python,Encryption,Vigenere,这是我必须解决的问题: “已使用讨论过的Vigenere加密方法对消息进行加密 在类中,其密文EQNVZ已被截获。请破译代码。假设 密钥与消息的长度相同,消息和密钥 仅由大写字母组成。” 有没有办法在python中实现这一点?我知道有一种方法可以在python中生成密文,但有没有其他方法呢?由于密文很短,可能最简单的方法就是强制执行它: def break_vignere(input, list_of_words): for word in list_of_words:

这是我必须解决的问题:

“已使用讨论过的Vigenere加密方法对消息进行加密 在类中,其密文EQNVZ已被截获。请破译代码。假设 密钥与消息的长度相同,消息和密钥 仅由大写字母组成。”


有没有办法在python中实现这一点?我知道有一种方法可以在python中生成密文,但有没有其他方法呢?

由于密文很短,可能最简单的方法就是强制执行它:

def break_vignere(input, list_of_words):
    for word in list_of_words:
        crypt = vignere(word)
        if crypt == input:
            return word
    return None

当然,如果我们在
单词列表中找不到输入文本,它可能会失败。这是一个技巧性的问题。如果“密钥的长度与消息的长度相同”,则您有一个隐藏除消息长度以外的所有内容的密钥。

如果“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()
,该函数检查纯文本是否都是大写,可能是对照字典。

我认为这可能是一种可能性,但是我不确定我是否遗漏了什么或者不知道如何做+1-除非你知道密钥来自一小部分可能性,否则这是不可破解的。密钥长度与密文相同,你可以选择一个密钥来生成任何你喜欢的明文。是否有任何可以做出的假设(如关键是一个真实的单词)?