有没有办法扭转这个javascript哈希函数?

时间:2017-06-26 20:30:59

标签: javascript string hash

我在javascript中有一个大的json字符串,我希望将其转换为短哈希,这solution似乎有用。

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

但有没有办法可以将其转换回json字符串?

2 个答案:

答案 0 :(得分:2)

哈希特别不可逆。这是它们的主要特性之一,使它们在密码学中很有用。

我认为问题是:你究竟想要完成什么?因为不管它是什么,听起来好像哈希不是答案。

https://en.wikipedia.org/wiki/Hash_function

  

加密哈希函数允许人们轻松验证一些   输入数据映射到给定的哈希值,但是如果输入数据是   未知,故意难以重建(或等效物   替代方案)通过了解存储的哈希值。

(强调我的)

你想要的不是散列而是压缩。寻找一个javascript的zip模块。对于纯文本JSON,您可以预期压缩率约为90%(取决于内容)。快速谷歌搜索显示其中有一百万,所以你必须找到一个适合你的特定用例。

答案 1 :(得分:1)

不,没有办法将哈希转换回创建它的字符串。散列函数的目的是将每个长字符串映射到一个较短的字符串 - 很容易证明有更多的长字符串而不是可以从现有字符创建的短字符串。

有多个字符串映射到每个散列字符串,并且无法确定用于创建散列字符串的字符串。您不可能找到两个映射到相同散列字符串的字符串,这是散列函数的基础,但同时它们确实存在。

实际上,哈希函数在加密方面是安全的,因为如果你只有哈希函数和哈希函数,就无法确定创建哈希的字符串。