如何从Javascript中使用的哈希函数中获取密码字符串?

如何从Javascript中使用的哈希函数中获取密码字符串?,javascript,algorithm,hash,passwords,Javascript,Algorithm,Hash,Passwords,我正在尝试实现用户友好密码系统,如果用户输入带有一个额外字符的原始密码,我希望将其标记为有效登录 我没有使用任何库来生成哈希,而是使用了以下哈希生成器代码: 注意:“密码”具有密码字符串。“散列”是由它生成的散列 let p = 131, valM=Math.pow(10,9)+7 for(let i=0;i<password.length;i++){ let charCode = password.charCodeAt(i) //console.l

我正在尝试实现用户友好密码系统,如果用户输入带有一个额外字符的原始密码,我希望将其标记为有效登录

我没有使用任何库来生成哈希,而是使用了以下哈希生成器代码:

注意:“密码”具有密码字符串。“散列”是由它生成的散列

let p = 131, valM=Math.pow(10,9)+7
    for(let i=0;i<password.length;i++){
        let charCode = password.charCodeAt(i)
        //console.log(password[i],charCode)
        hash += charCode*(Math.pow(p,password.length-(i+1)))
    }
hash %= valM
设p=131,valM=Math.pow(10,9)+7

for(设i=0;i从散列中检索密码是不可能的。最简单的方法是从鸽子洞原理中看出这一点


因为JavaScript中的数字是IEEE的两倍,所以最多有2^64个可能的哈希值。然而,有远远超过2^64个可能的密码。事实上,密码是无限多的。因此,没有从哈希集H到密码集p的满射函数。换句话说,没有从H到p这样的函数f每个密码的帽子∈ P、 有一个散列h满足f(h)=p.

为了更好地说明您的问题:假设我们有一个哈希算法,它将两个数字相加得到一个结果哈希。我告诉您,结果哈希值是42。除了哈希算法和42的哈希值之外,您没有其他信息。只有这些信息,无法确定这两个数字rs加在一起得到42。。。