0

我试图找到 2 个不同的纯文本词,它们创建了非常相似的哈希值。

我正在使用散列方法“漩涡”,但我真的不需要在案例或漩涡中回答我的问题,如果您可以使用 md5 或更简单的方法就可以了。

我正在寻找的相似之处是它们包含相同数量的字母(不管它们有多少杂音)

即明文'test'哈希1:abbb5有1个a,3个b,一个5明文'blahblah'哈希2:b5bab必须相同,但顺序无关紧要。

我确信我可以阅读它们是如何创建的并将其分解并反转它,但我只是想知道我所说的是否会发生。

我想知道,因为我还没有找到我正在解释的匹配项(我创建了一个 PoC 来运行随机单词/字母,直到它重新创建了一个类似的匹配项),但话又说回来,我需要永远这样做是东它。并且想知道是否有真正了解哈希/加密的人会帮助我。

4

1 回答 1

2

所以你可以这样做:

  1. 创建一个空的排序地图 \
  2. 创建一个 64 位计数器(您很可能不需要超过 2^63 个输入,因为在计算它们之前您已经死了 - 除非量子加密真的起飞)
  3. 使用计数器作为输入,可能最容易将其编码为 8 个字节;
  4. 将其用作散列函数的输入;
  5. 以十六进制编码散列的输出(使用 ASCII 字节,以提高速度);
  6. 按数字/字母顺序对十六进制进行排序(实际上是一样的)
  7. 检查排序的十六进制结果是否是地图中的键
    • 如果是,则显示十六进制结果,地图中的旧计数器和当前计数器(并停止)
    • 如果不是,则将排序后的十六进制结果放入映射中,计数器为值
  8. 增加计数器,转到 3

这就是所有人。SHA-1 的结果:

011122344667788899999aaaabbbcccddeeeefff 对于 320324 和 429678

我不知道您为什么要对十六进制执行此操作,散列会很大,以至于它们看起来不会太相似。如果您的字母更小,您的代码将运行(甚至)更快。如果您使用整个输出字节(即00toFF而不是0to F)而不是十六进制,则将花费更多时间-在我的机器上进行的快速(非优化)测试表明它不会在几分钟内完成,然后内存不足。

于 2015-03-05T01:40:48.210 回答