【发布时间】:2011-02-04 00:39:51
【问题描述】:
我正在使用 djb2 算法为字符串生成哈希键,如下所示
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
现在每个循环都有两个大数的乘法,在字符串的第 5 个字符的第 4 个字符经过一段时间后,随着哈希值变得很大,溢出
什么是正确的重构方法,使哈希值不会溢出并且哈希也正确发生
【问题讨论】:
-
没有DJB2 hash这种东西,只有标准的DJB,然后是Salsa20等。
-
cse.yorku.ca/~oz/hash.html 指的是 DJB2,如果没有得到正式认可,我相信这个术语被广泛使用。
标签: hash string-hashing