Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单的基于字符串的JavaScript单向哈希算法_Javascript_Hash - Fatal编程技术网

简单的基于字符串的JavaScript单向哈希算法

简单的基于字符串的JavaScript单向哈希算法,javascript,hash,Javascript,Hash,我一直在寻找一种简单的JavaScript轻量级哈希算法。我确实在堆栈溢出的基础上找到了这个基于数字的答案 不幸的是,我无法使用它,因为它是基于数字的,我需要在代码的其他地方使用这个散列作为唯一索引。这个函数通常返回负数,这是一个很大的禁忌(请尝试上面链接的代码段中的'hello world!'.hashCode(),看看我的意思) 我曾经尝试过在JS中使用md5散列库,但它们对于我来说太庞大了,而且加密库(如)也太过分了 值得注意的是,这个散列中的信息无论如何都不敏感,如果被解密也不一定重要。

我一直在寻找一种简单的JavaScript轻量级哈希算法。我确实在堆栈溢出的基础上找到了这个基于数字的答案

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

我曾经尝试过在JS中使用md5散列库,但它们对于我来说太庞大了,而且加密库(如)也太过分了

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


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

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

我无法使用它,因为它是基于数字的,我需要在代码的其他地方使用这个散列作为唯一索引

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

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

怎么样
Math.abs('hello world!'.hashCode())
?@KooiInc这不会使碰撞增加两倍吗?对不起,我应该更清楚一点。你的回答完全合理,但我的需求略有不同。我的集合中通常有许多相似的字符串,这些字符串需要通过添加时间戳+杂项来区分。数据。这将导致非常长的字符串(长度通常为30-40个字符)。不幸的是,这是不可接受的,因此我采用了散列方法。我希望我能制作出一个固定长度的字符串,这足以作为唯一标识符。@zesda你能详细介绍一下这些字符串的用法吗?特别是它们是否在不同的程序/计算机之间共享,以及它们的生命周期有多长。我将使用这些字符串来引用上传的文件。当涉及到在唯一的基础上引用这些上传的文件时,问题就出现了。为这些文件上传建立索引是一件麻烦的事情,因为这是一个异步过程,所以我使用来自文件本身的信息来生成唯一的基于字符串的ID。可用信息包括类型、名称、大小和上次修改日期。但如果没有时间戳,这些不是唯一的。因此,我希望使用哈希来减少字符串长度。那么,是什么阻止你使用随机数作为“散列”?您仍然可能会遇到冲突,但对于固定长度的密钥,这种情况总是会发生(除非您从服务器请求免费ID)。随机数不会从原始数据继承其值。如果我不能在其他地方复制散列,那么如何引用我的文件?