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

时间:2009-09-18 03:11:43

标签: algorithm security hash

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

例如:

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

5 个答案:

答案 0 :(得分:13)

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

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

加密哈希输出的长度除了缩小产生它的算法之外什么都没有。

答案 1 :(得分:3)

  1. 哈希似乎只包含十六进制字符(每个字符代表4位)

  2. 总计数为32个字符 - >这是一个128位长的哈希值。

  3. 符合这些规范的标准哈希算法有:haval,md2,md4,md5和ripemd128。

  4. 最高概率是使用了MD5。

  5. md5(“更高”)!= df072c8afcf2385b8d34aab3362020d0

  6. 最高概率是使用了一些盐。

  7. 最高概率仍然是MD5。

答案 2 :(得分: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.
}

答案 3 :(得分:2)

与任何常见的hashing算法都不匹配:

  

http://www.fileformat.info/tool/hash.htm?text=higher

也许在散列之前添加了 salt ......

答案 4 :(得分:1)

除了尝试一堆你知道并看到是否有任何匹配之外。