我使用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中运行良好。
发生了什么事?
答案 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);