djb2 函数发生冲突的可能性有多大?
what is possibility of collision in djb2 function?
我正在尝试使用 djb2 哈希函数为
之类的字符串生成唯一 ID
"114.143.227.82Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"
使用下面javascript中给出的算法发生碰撞的可能性有多大。
String.prototype.hashCode = function(){
var hash = 5381;
if (this.length === 0) return hash;
for (var i = 0; i < this.length; i++) {
var character = this.charCodeAt(i);
hash = (( hash << 5 ) + hash ) ^ character;
}
return hash;
}
用法:
var hash = new String("114.143.227.82"+navigator.userAgent).hashCode();
alert(hash);
参考:
http://www.cse.yorku.ca/~oz/hash.html
对于上面的字符串,我得到 -ve 整数值。如何为这些类型的字符串 return +ve 整数?
修改上面的代码后得到解决
String.prototype.hashCode = 函数(){
变量散列 = 5381;
如果 (this.length === 0) return 散列;
对于 (var i = 0; i < this.length; i++) {
var 字符 = this.charCodeAt(i);<br>
散列 = 散列 * 33 ^字符;
}
return 散列 >>>0;
}
我正在尝试使用 djb2 哈希函数为
之类的字符串生成唯一 ID"114.143.227.82Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"
使用下面javascript中给出的算法发生碰撞的可能性有多大。
String.prototype.hashCode = function(){
var hash = 5381;
if (this.length === 0) return hash;
for (var i = 0; i < this.length; i++) {
var character = this.charCodeAt(i);
hash = (( hash << 5 ) + hash ) ^ character;
}
return hash;
}
用法:
var hash = new String("114.143.227.82"+navigator.userAgent).hashCode();
alert(hash);
参考:
http://www.cse.yorku.ca/~oz/hash.html
对于上面的字符串,我得到 -ve 整数值。如何为这些类型的字符串 return +ve 整数?
修改上面的代码后得到解决
String.prototype.hashCode = 函数(){
变量散列 = 5381;
如果 (this.length === 0) return 散列;
对于 (var i = 0; i < this.length; i++) {
var 字符 = this.charCodeAt(i);<br>
散列 = 散列 * 33 ^字符;
}
return 散列 >>>0;
}