用于JavaScript的简单的基于字符串的单向散列算法

时间:2013-07-01 09:37:12

标签: javascript hash

我一直在寻找一种简单轻量级的JavaScript哈希算法。我确实在Stack Overflow上发现了这个基于数字的答案here

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

我很想在JS那里使用md5散列库但是它们只是为了我的目的而笨重而加密库(例如this)是过度的。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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