Encryption 寻找相似的散列

Encryption 寻找相似的散列,encryption,hash,cryptography,whirlpool,Encryption,Hash,Cryptography,Whirlpool,我试图找到两个不同的纯文本单词,它们可以创建非常相似的哈希 我使用的是“whirlpool”散列方法,但我并不需要在case或whirlpool中回答我的问题,如果你可以使用md5或其他更简单的方法就可以了 我要寻找的相似之处是,它们包含相同数量的字母(不管它们有多吵) i、 e 纯文本“测试” 散列1:abbb5有1个a,3个b,1个5 纯文本“blahblah” 散列2:b5bab必须具有相同的顺序,但与顺序无关 我相信我能读懂它们是如何被创造出来的,并将其分解和反转,但我只是想知道我所说的

我试图找到两个不同的纯文本单词,它们可以创建非常相似的哈希

我使用的是“whirlpool”散列方法,但我并不需要在case或whirlpool中回答我的问题,如果你可以使用md5或其他更简单的方法就可以了

我要寻找的相似之处是,它们包含相同数量的字母(不管它们有多吵)

i、 e 纯文本“测试” 散列1:abbb5有1个a,3个b,1个5 纯文本“blahblah” 散列2:b5bab必须具有相同的顺序,但与顺序无关

我相信我能读懂它们是如何被创造出来的,并将其分解和反转,但我只是想知道我所说的是否发生了


我很好奇,因为我还没有找到我所解释的匹配项(我创建了一个PoC来运行并抛出随机的单词/字母,直到它重新创建了一个类似的匹配项),但是再次强调,按照我原来的方式做这件事需要很长时间。我想知道是否有真正了解哈希/加密的人能帮我解决问题。

所以你可以这样做:

  • 创建一个空的排序映射\
  • 创建一个64位计数器(你可能不需要超过2^63个输入,因为在计算它们之前你就已经死了——除非量子加密真的成功了)
  • 使用计数器作为输入,可能最容易将其编码为8字节
  • 将其用作哈希函数的输入
  • 以十六进制编码散列的输出(使用ASCII字节表示速度)
  • 按数字/字母顺序对十六进制进行排序(实际上是一样的)
  • 检查排序的十六进制结果是否为映射中的键
    • 如果是,则显示十六进制结果、映射中的旧计数器和当前计数器(并停止)
    • 如果不是,则将排序后的十六进制结果放入映射中,并将计数器作为值
  • 增加计数器,转到3
  • 这就是所有的人。SHA-1的结果:

    011122344667888999AABBCCDDEEEFFF,适用于320324和429678


    我不知道你为什么要这样做十六进制,散列将是如此之大,他们看起来不会太像。如果你的字母表更小,你的代码运行(甚至)更快。如果使用整个输出字节(即
    00
    FF
    而不是
    0
    F
    )而不是十六进制,则需要花费更多的时间-快速(非优化)在我的机器上进行的测试表明,它不会在几分钟内完成,然后会耗尽内存。

    定义一个新的哈希函数,该函数首先应用原始哈希,然后对输出中的字符进行排序。然后将标准的碰撞查找算法应用于这个新函数,它的输出空间更小,因此碰撞更常见。但是我认为减少的幅度不是很大,所以它仍然只适用于短散列,可能最多12个字节左右。从问题中的示例来看,它必须是相同数量的相同字母和数字。是这样吗?@CodesInChaos如果您使用较小的字母表,例如0和1,那么可能可以用于完整哈希:P@CodesInChaos令人惊讶的是,在SHA-1:)中只对429678个十六进制进行了比较:01112344466778889999aaabbbccccddeeeefff用于320324和429678(输入=64位长,包括初始零位)如果对字节执行此操作,则在线程“main”java.lang.OutOfMemoryError中会出现异常:超出了GC开销限制。我想知道是否会发生这种情况……弱ass笔记本电脑:
    #本机内存分配(malloc)无法分配312737792字节以提交保留内存。