【发布时间】:2019-02-03 18:12:27
【问题描述】:
我正在寻找一种方法来对从 3rd 方服务获得的用户 ID 进行哈希处理,以便我可以将哈希用作主键。
我的理解是,通常的SHA-512 风格算法,给定一个保证唯一的输入字符串,不能保证产生一个也保证唯一的哈希值。
是否有可以产生唯一哈希的哈希算法?
更具体地说,NodeJS 10.9 或更高版本是否支持开箱即用的算法
【问题讨论】:
-
鉴于典型哈希算法的范围是有限的,而您可以输入无限多的输入,因此很难获得“唯一”哈希。当然,实际上从两个随机输入字符串中发生冲突的可能性很小,除非您有目的地尝试找到冲突,否则它可能不会发生。
-
我想,满足您要求的任何此类散列函数的输出都将与您的输入长度成比例,因为输入集必须与输出集一对一.
-
根据定义,哈希具有非零的冲突概率,因此不能保证它是唯一的。如果您想要唯一性保证,那么您将需要使用哈希以外的其他东西,例如加密用户 ID 或类似的东西,并且它必须随着输入的长度而缩放。如果您愿意处理概率(而不是保证),那么您可能会找到一个具有足够低的非唯一性概率的哈希,但究竟什么会起作用取决于您没有共享的许多细节和要求。
-
512 位是很多位...查看this relevant question 的 SHA-256,然后考虑 SHA-512 的空间是 平方。
标签: node.js encryption sha cryptojs