是否有保证产生唯一哈希的SHA?

时间:2018-08-29 03:56:58

标签: node.js encryption sha cryptojs

我正在寻找一种对从第三方服务获得的用户ID进行散列的方法,以便可以将散列用作主键。

我的理解是,在保证输入字符串唯一的情况下,通常的div样式算法无法保证生成的哈希值也必须唯一。

是否存在将产生唯一哈希的哈希算法?

更具体地说,NodeJS 10.9或更高版本是否支持这种算法?

2 个答案:

答案 0 :(得分:1)

大多数哈希算法都在尽力避免冲突。 SHA 512应该适合您,即使不是SHA 256也应该适合您。请注意,如果您看到输入数据中存在冲突,则哈希中将存在冲突,在这种情况下,我建议为两个单独的帐户附加可能唯一的其他内容-例如作为时间戳,它们是在将值输入到哈希之前创建的。只要两个输入都是不可变的,并且它们在帐户中永不更改,就可以正常工作。

您可以使用crypto.getHashes()查看可用的哈希并选择所需的哈希。您是在要求唯一性而不是安全性,所以更快是更好的选择。

此答案也与以下内容有关: When using SHA-256 hashes as a primary key, is it OK to ignore the possibility of collisions?

答案 1 :(得分:1)

SHA-512哈希的长度为64个字节(512位),这为您提供了10 154 个值组合。因此,获得相同哈希的机会很小(我的意思是非常少)。

想想它的重量要少得多(以克为单位,它的重量是月球的百万倍)。如果其他任何行星重量10 154 克,那么甚至数百万个太阳的总和也不能等于该数量。

因此,这意味着永远不会。甚至比特币地址都使用此方法作为钱包地址。如果您有机会找到一个组合,那么您将成为亿万富翁。我保证

enter image description here