0

我想生成一些数据的哈希。通过一些哈希算法,我可以找到最适合我的应用程序的 bcrypt 和 PBKDF。可能存在使用不同的数据算法生成相同散列的情况(如在 MD5 中,它可以为不同类型的数据生成相同的散列)。

通过许多专家的评论,bcrypt 是最好的安全散列算法,它提供了不同散列之间的唯一性。

但是,PBKDF2 是否提供哈希的唯一性?

编辑 1

我需要使用相同的输入数据生成哈希(哈希键将为相同的输入生成不止一次),但它不应该为不同的输入数据生成相同的哈希(可能发生在某些哈希算法中)。

4

1 回答 1

1

诸如 SHA-2 之一的算法就足够了。生成的散列对于消息不是唯一的。甚至有无限数量的散列到相同值的消息是真的。诀窍是不可能找到创建此哈希的其他消息之一。

对于 SHA-256,在生成具有不同消息的两个散列时产生冲突的机会等于 1/2^256。但是,您可以生成和存储哈希值,然后计算所有可能中的一对相同的机会。在这种情况下,生日问题是有效的。这就是为什么散列只提供一半的安全性。因此,在 340282366920938463463374607431768211456 中,产生 2^128 个哈希值的冲突的可能性是(大约)1/2^128 或 1。这就是为什么您只需要担心诸如 MD5(可能还有 SHA-1 in不久的将来)。

实际上 PBKDF2 的内部状态与使用的内部哈希相同。使用 PBKDF2(除了作为密钥派生函数而不是哈希)对您毫无帮助。它与内部散列一样容易受到(或者更确切地说,不易受到)冲突的影响。

于 2016-11-26T02:03:45.177 回答