jsSHA512来自同一个字符串的不同哈希值

时间:2016-06-03 04:11:21

标签: javascript hash

我使用jsSHA库来散列密码,但每次运行脚本时,我都会从同一个字符串中获取不同的哈希值:

/* Password hash function */
var b = $("form#register"),
    shaObj  = new jsSHA('SHA-512', 'TEXT');

b.on('submit', function (e) {

    e.preventDefault();

    var p = $('#reg_pwd'),
        q = $('#confirm_pwd');

    shaObj.update(p.val());
    var p_hash = shaObj.getHash("HEX");
    //p.val(p_hash);

    shaObj.update(q.val());
    var q_hash = shaObj.getHash("HEX");
    //q.val(q_hash);

    $('p').html('String: ' + p.val() + '<br />Hash: ' + p_hash +
                '<br />String: ' + q.val() + '<br />Hash: ' + q_hash)

    //this.submit()

});

我已经能够在fiddle中重现这一点。只需在其中一个字段中键入任何文本,然后按提交多次以查看哈希更改。不过,它在demo page中运行良好。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

jsSHA的.update()方法在任何先前的更新之后附加其他数据,有效地将它们连接在一起:

shaObj.update(p.val());
shaObj.update(q.val());
// similar to...
shaObj.update(p.val() + q.val());

要计算每个输入的哈希值,您必须为每个输入创建一个new jsSHA()实例:

var shaObj = new jsSHA('SHA-512', 'TEXT'); // <---
shaObj.update(p.val());
var p_hash = shaObj.getHash("HEX");
//p.val(p_hash);

var shaObj = new jsSHA('SHA-512', 'TEXT'); // <---
shaObj.update(q.val());
var q_hash = shaObj.getHash("HEX");
//q.val(q_hash);