0

我一直在寻找一种用于 JavaScript 的简单轻量级散列算法。我确实在 Stack Overflow 上找到了这个基于数字的答案

不幸的是,我无法使用它,因为它是基于数字的,我需要在我的代码中的其他地方使用这个哈希作为唯一索引。通常这个函数返回负数,这将是一个很大的禁忌(尝试'hello world!'.hashCode()从上面链接的代码片段中了解我的意思)。

我一直很想将 md5 散列库用于 JS,但它们对于我的目的来说太笨重了,而且加密库(例如this)是矫枉过正的。

值得注意的是,这个散列中的信息无论如何都不敏感,如果它被解密也不一定重要。这个函数的目的是简单地生成固定长度的输出数据,作为对我要传入的原始数据的缩短引用。

非常感谢任何帮助、提示和评论:)

4

2 回答 2

0

Kooilnc 提出的解决方案,使用绝对值,应该为你做 tric。但是,如果您想使用散列函数生成引用,我假设您获得的引用应该是唯一的,以匹配生成它的确切元素。如果是这种情况,请注意碰撞。即使原始消息不同,散列函数也可以创建相似的散列,我们称之为冲突。如果我没记错的话,SHA-1 也可用于 java 脚本,而且不是那么大。祝你好运

于 2013-07-01T09:55:18.747 回答
0

我无法使用它,因为它是基于数字的,我需要将此哈希用作我代码中其他地方的唯一索引。

散列函数通常是基于数字的并且很少是完美的(产生唯一的键)。我认为你需要一些不同的东西:

function GuidGen()
{
    this.items = {};
    this.size = 0;
}

GuidGen.prototype.get = function(str)
{
    if (!(str in this.items))
    {
        this.items[str] = this.size++;
    }
    return this.items[str];
}

// usage:
id = new GuidGen();
id.get("hello world");  // 0
id.get("spam");         // 1
id.get("eggs");         // 2
id.get("hello world");  // 0
于 2013-07-01T10:13:15.090 回答