我可以根据初始密钥和输出哈希识别哈希算法吗?

Chr*_*isc 7 security algorithm hash

如果我同时拥有初始密钥和创建的哈希,有没有办法确定使用了什么哈希算法?

例如:

  • 关键:更高
  • 哈希:df072c8afcf2385b8d34aab3362020d0
  • 算法:?

eri*_*son 13

通过查看长度,您可以决定尝试哪种算法.MD5和MD2产生16字节摘要.SHA-1产生20个字节的输出.等等.然后对输入执行每个哈希,看它是否与输出匹配.如果是这样,那就是你的算法.

当然,如果超过"关键"被散列,你也需要知道.根据应用程序,散列通常是迭代应用的.也就是说,散列的输出再次被散列,并且该输出被散列...经常数千次.因此,如果您事先知道执行了多少次迭代,那也可以提供帮助.

除了加密哈希的输出中的长度之外没有什么可以帮助缩小产生它的算法的范围.

  • 当然,但在现实世界中,我从未见过这样做 - 包括这个问题.另一方面,我有无数的经验,我必须弄清楚协议中使用了哪些摘要,并通过简单计算我能够验证我的第一个猜测的字节.这有很多帮助.当然,YMMV. (2认同)

Dan*_*Tao 3

好吧,考虑到流行的哈希算法的数量是有限的,也许你提出的建议并不是那么荒谬。

但假设我问你这个:

如果我有输入和输出,我可以确定该函数吗?

一般来说不,在没有任何附加信息的情况下,您不能仅仅通过知道一个输入和一个输出来确定任何函数的内部工作原理

// very, very basic illustration
if (unknownFunction(2) == 4) {
    // what does unknownFunction do?
    // return x + 2?
    // or return x * 2?
    // or return Math.Pow(x, 2)?
    // or return Math.Pow(x, 3) - 4?
    // etc.
}
Run Code Online (Sandbox Code Playgroud)