javascript - JavaScript 的简单(非安全)哈希函数?

标签 javascript hash md5 sha1

<分区>

Possible Duplicate:
Generate a Hash from string in Javascript/jQuery

谁能推荐一个用(浏览器兼容的)JavaScript 编写的简单(即数十行代码,而不是数百行)哈希函数?理想情况下,我想要一些东西,当将字符串作为输入传递时,会产生类似于 32 个字符的十六进制字符串的东西,这是 MD5、SHA1 等的典型输出。它不必是加密安全的,只是合理地抵抗冲突. (我最初的用例是 URL,但将来我可能想在其他字符串上使用它。)

最佳答案

这个我自己没验证过,大家可以看看这个JavaScript implementation of Java's String.hashCode() method .看起来相当短。

With this prototype you can simply call .hashCode() on any string, e.g. "some string".hashCode(), and receive a numerical hash code (more specifically, a Java equivalent) such as 1395333309.

String.prototype.hashCode = function() {
    var hash = 0;
    for (var i = 0; i < this.length; i++) {
        var char = this.charCodeAt(i);
        hash = ((hash<<5)-hash)+char;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
}

2022 年编辑:

人们早就接受了modifying built-in prototypes is bad practice ,所以你应该使用一个简单的函数:

/**
 * Returns a hash code from a string
 * @param  {String} str The string to hash.
 * @return {Number}    A 32bit integer
 * @see http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
 */
function hashCode(str) {
    let hash = 0;
    for (let i = 0, len = str.length; i < len; i++) {
        let chr = str.charCodeAt(i);
        hash = (hash << 5) - hash + chr;
        hash |= 0; // Convert to 32bit integer
    }
    return hash;
}

关于javascript - JavaScript 的简单(非安全)哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6122571/

相关文章:

javascript - 为什么 JavaScript 有以下几种连线行为?

sql-server - SQL Server 何时会选择散列连接而不是合并连接?

c# - 更快的 MD5 替代品?

hash - 哈希冲突的例子?

objective-c - 有没有不需要同时输入全部的MD5库?

flutter - Flutter和Dart将字符串转换为md5,然后作为字符串调用

javascript - 运输计算器,此代码中我缺少什么才能使其正常工作?

javascript - 如何通过puppeteer获取嵌入页面的pdf?

javascript - jQuery 从字符串数组中选择一个随机值

hash - 将要散列的最大字符串长度是多少?