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

Is there a SHA that's guaranteed to produce a unique hash?

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

我的理解是,通常的 SHA-512 风格算法,给定一个保证唯一的输入字符串,不能保证产生一个也保证唯一的哈希值。

是否有可以生成唯一哈希值的哈希算法?

更具体地说,NodeJS 10.9 或更高版本是否支持开箱即用的算法

大多数哈希算法都在尽力避免冲突。 SHA 512 应该适合你,如果不是 SHA 256。请注意,如果你可以在输入数据中看到冲突,那么哈希中也会有冲突,在这种情况下,我建议附加一些可能对两个单独的帐户唯一的东西——比如作为它们创建的时间戳 - 在将值输入哈希之前。只要两个输入都是不可变的并且它们在帐户上永远不会改变,这就可以正常工作。

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

这个答案也相关: When using SHA-256 hashes as a primary key, is it OK to ignore the possibility of collisions?

SHA-512 哈希的长度为 64 字节(512 位),这为您提供了 10154 个值组合。所以它获得相同哈希值的机会非常少(我的意思是非常非常少)。

少多少,想想太阳的克重(是耳朵的百万倍)。如果任何其他行星重量为 10154 克,即使是数百万个太阳加起来也不能等于这个数量。

所以非常少,这意味着永远不会。甚至比特币地址都使用这种方法作为钱包地址。如果你碰巧找到一个组合,你将成为亿万富翁。我保证