用Python解密无密钥的维热纳密码
我遇到的问题是:
“有一个消息使用我们课堂上讨论的维吉尼亚加密方法进行了加密,得到的密文是 EQNVZ,现在被截获了。请破解这个代码。假设密钥的长度和消息一样,并且消息和密钥只包含大写字母。”
有没有办法在 Python 中做到这一点?我知道可以在 Python 中生成密文,但有没有办法反向操作呢?
3 个回答
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()
的函数,这个函数可以检查明文是否都是大写字母,可能还会和一个字典进行对比。
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
中找不到输入的文本,这种方法可能会失败。
11
这是一个有点绕的问法。如果“密钥和消息的长度一样”,那么你就有了一种叫做一次性密码本的加密方式,这种方式除了能隐藏消息的内容外,其他信息都无法被看出。