【问题标题】:Solve vigenere code without key - python无钥匙解决vigenere代码 - python
【发布时间】:2011-12-23 08:00:00
【问题描述】:

这是我必须弄清楚的问题:

"一条消息已使用所讨论的 Vigenere 加密方法进行加密 在课堂上,其密文 EQNVZ 已被截获。破解密码。认为 密钥与消息的长度相同,并且消息和密钥 仅由大写字母组成。”

有没有办法在 python 中做到这一点?我知道有一种方法可以在 python 中制作密文,但有没有其他方法?

【问题讨论】:

  • 使用与密文相同的密钥长度,您可以选择一个密钥,使明文成为您喜欢的任何内容。是否可以做出任何假设,例如关键是一个真实的单词?

标签: python encryption vigenere


【解决方案1】:

由于您的密文很短,因此暴力破解可能是最简单的:

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】:

    这是一个棘手的问题。如果“密钥与消息的长度相同”,那么您有一个 one-time pad,它隐藏了除消息长度之外的所有内容。

    【讨论】:

    • 我认为这可能是一种可能性,但不确定是我遗漏了什么还是不知道该怎么做
    • +1 - 除非您知道密钥来自一小组可能性,否则这是牢不可破的。
    【解决方案3】:

    如果“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() 来检查所有的键,该函数检查明文是否全部为大写,并且可能与字典相匹配。

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 2016-06-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多