我们正在使用 Crypto JS SHA3 将我们的用户名和密码散列在一起。
该函数从用户名和密码的两个 html 输入字段中获取输入,将它们与盐连接起来,并对它们进行哈希处理。第一个散列成功,但是再次散列相同的输出会产生不同的结果。
这是相关代码:
$prehash = $salt + $user + $pass;
$prehash = CryptoJS.enc.Utf8.parse($prehash);
var sha3 = CryptoJS.algo.SHA3.create();
sha3.update($prehash);
var password = sha3.finalize().toString(CryptoJS.enc.Hex);
sha3.reset();
var sha3 = CryptoJS.algo.SHA3.create();
sha3.update($prehash);
var password2 = sha3.finalize().toString(CryptoJS.enc.Hex);
sha3.reset();
console.log('PREHASH: ' + $prehash);
console.log('HASHWORD: ' + password);
console.log('HASHWORD2: ' + password2);
控制台日志输出以下内容:
PREHASH: 4d616e636865737465722c20436f6e6e65637469637574204d6f62696c65205573657273546f776e20436c65726b68617665206272616e6368657320616476616e63652042656c6769756d
HASHWORD: db90cbb6766f3ca0dc8af39455cd6e224263db31caed3f73f9ad923a02c34211c85cc17a8e3d0166cd82c10d12a137332891c0c201174e16d19a93b6b4d430cf
HASHWORD2:
9ed635963fa0079a0520d8afa59d1e19be601d7bf77f623702304240993ce9bdd2f3023ca6bbd44f2ab30ceb2de1c8f0d3fe3d63292c5a23c44ddd1d485baa71
编辑:我们在另外两台设备上进行了测试,发现我们在另外两台设备上得到了正确的输出。这种行为只在我同事的手机上观察到。现在我们更加困惑了。有人知道为什么不同的设备会产生不同的输出吗?
编辑:这是一个演示问题的jsfiddle。它应该是真实的。在我们的 android 4.2.2 设备上,它读取 false & false http://jsfiddle.net/odL57wfo/2/