【问题标题】:"Decrypt" MD5 in c++在 C++ 中“解密”MD5
【发布时间】:2016-04-01 11:28:33
【问题描述】:

我知道解密 MD5 哈希是不可能的。但是,我正在尝试解决一个谜语游戏,并且很多提示都是用 MD5 加密的。由于我在 google 上找不到一些加密的单词,我想知道是否有可能制作一个 C++ 程序来存储常见的英语单词及其加密,并在给定某种加密时搜索答案。

编辑:提示是单词,而不是短语。

【问题讨论】:

  • 提示不太可能存储为 MD5 哈希,因为程序永远无法恢复它们。你是怎么得出这个结论的?
  • 或者也许您的意思不是提示,而是“答案”?如果用户必须输入完整的答案,而程序只是检查它是否正确,则可以使用散列函数(例如 MD5)。但是,如果您指的是向用户显示的提示,则它们必须以不同的方式存储。
  • @sinelaw 提示的单词被加密为 MD5 哈希,而不是完整的短语。
  • 这仍然没有意义。单个单词也将无法恢复。

标签: c++ encryption hash cryptography


【解决方案1】:

MD5 散列就像单词所说的一种散列函数一样。散列函数是一种在更小的输出范围上显示输入的函数。它也是一个单向函数,不可能“dehash”一些东西

一个例子:

输入:所有可能的字符 输出:一个介于 0 到 100 万之间的数字。

(100万绝对够用,见http://www.oxforddictionaries.com/words/how-many-words-are-there-in-the-english-language

假设您正在对文本进行哈希处理,每个单词都可以显示在一个数字上。散列函数通常不保证一个单词不会显示在同一个数字上。但是由于没有意义的词多得多,所以散列函数大部分时间都可以工作

【讨论】:

  • 散列函数的概念不仅仅是为了缩短,事实上在很多情况下它习惯于相反,例如从短密码中导出加密密钥。
  • 据我所知,散列函数用于将对象或其他输入投影到一个较小的值,因此可以更紧凑地存储它。这至少在哈希表中完成,其中哈希函数的结果远小于输入
  • @SimonHoubracken:输出范围更小,情况不一定如此。例如,假设有一个以 16 位整数为键的哈希表,您可能需要一个哈希函数以伪随机但可重复的方式在整个表中喷射键(例如,以最大限度地减少恶意用户设计会发生冲突的输入的能力)。如果您使用封闭式散列/开放式寻址并且模糊地使用所有 65536 个可能的键,您可能想要说 100k 个桶,并且您需要一个具有至少 100k 个可能值的散列函数来喷洒整个元素(例如 32 位散列用于 16 位输入)。
  • 用于字典的哈希函数也就是哈希表,与密码哈希函数有很大的不同。对于字典,它们需要快速并且可以包含频繁的冲突,然后再解决。 MD5 和 SHA2 系列等哈希是加密哈希函数,旨在尽可能避免冲突,并使用完整输入生成哈希。一般来说,改变输入中的一位会改变大约 50% 的输出位。
【解决方案2】:

解密哈希的方法是根据字符串生成一个,然后将结果与您拥有的哈希进行比较。

例如,如果您知道游戏只使用字母,那么您可以创建一个包含所有字母组合的表,获取此数据库并使用 MD5 对它们进行散列,然后将它们与您拥有的散列进行比较。

您可以使用任何您想要的编程语言来执行此操作,只需 google: md5 hash "language"。你会发现一个现成的散列函数。然后你只需要写:

  • 生成可能单词数据库的代码,
  • 散列这些词
  • 将哈希值与您拥有的哈希值进行比较

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    如前所述,哈希是一种无法反转的数学函数。所以不可能“解密”一个哈希。

    但是,正如您所猜想的那样,计算可疑结果的哈希值并将您的哈希值与它进行比较是完全可以的。在现实世界的场景中,会有一个 salt 用于使这变得不可能,但由于它是一种测试,您可以为此使用 rainbow table

    【讨论】:

    • 欢迎发表评论,为什么您认为这“没有用”。没有反馈,我无法改进帖子。
    【解决方案4】:

    它不是加密,它是一个安全的散列函数:它被设计为只有一种方式。并且没有办法给它一个哈希来告诉它原始输入字符串包含一些单词;您需要完美地猜测整个提示,否则您将得不到任何信息。

    但是,如果提示只是单词,那么您当然可以建立一个候选单词哈希表并在其中搜索给定的哈希;这将相当容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2014-02-20
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多