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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以根据初始密钥和输出哈希识别哈希算法吗?相关的知识,希望对你有一定的参考价值。

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

例如:

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

好吧,鉴于有一些有限数量的流行哈希算法,也许你提出的并不是那么荒谬。

但是假设我问你这个:

如果我有输入和输出,我可以确定功能吗?

一般来说,不,你不能简单地通过知道一个输入和一个输出来确定任何函数的内部工作,而无需任何附加信息。

// 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.
}
另一答案

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

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

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

另一答案
  1. 哈希似乎只包含十六进制字符(每个字符代表4位)
  2. 总计数为32个字符 - >这是一个128位长的哈希值。
  3. 符合这些规范的标准哈希算法有:haval,md2,md4,md5和ripemd128。
  4. 最高概率是使用MD5。
  5. md5(“更高”)!= df072c8afcf2385b8d34aab3362020d0
  6. 最高的可能性是使用了一些盐。
  7. 最高概率仍然是MD5。
另一答案

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

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

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

另一答案

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

以上是关于我可以根据初始密钥和输出哈希识别哈希算法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python哈希函数啥情况下抛出异常

哈希算法的未来

python之哈希算法

区块链:防篡改的哈希加密算法

HMAC哈希消息认证码

公钥、私钥、哈希、加密算法基础概念