哈希的唯一值=唯一哈希?

neb*_*ebs 3 php string random hash unique

从理论上讲,散列一个独特的值会产生一个独特的价值吗?

假设我有一个包含2列的数据库表:id和code.id是一个自动递增的int,代码是一个varchar.如果我做 ...

$code = sha1($id);
Run Code Online (Sandbox Code Playgroud)

...然后将$ code存储到与$ id相同的行中.我的代码列是否也是唯一的?

如果我追加当前时间呢?例如:

$code = sha1($id . time());
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mic*_*sen 7

一般来说,答案是否定的.这很简单:SHA-1有2 ^ 160个不同的输出--160位,但还有更多的输入(例如,有2 ^ 320个不同的40字节字符串,并且它们不能全部映射到独特的输出).

给定足够的值子集,答案可能是.这取决于确切的算法和子集的大小:如果可能的输入数量小于可能的输出数量,则可能(但不保证).在考虑这一点时,记住生日悖论可能会有所帮助:碰撞的概率不会随着输入的数量而线性增加.