Javascript Crypto JS SHA3在相同输入上提供不同的输出

Javascript Crypto JS SHA3在相同输入上提供不同的输出,javascript,jquery,cryptojs,sha-3,Javascript,Jquery,Cryptojs,Sha 3,我们使用Crypto JS SHA3将用户名和密码散列在一起 该函数从用户名和密码的两个html输入字段中获取输入,将它们与salt连接起来,并对它们进行散列。第一个散列成功工作,但是再次对相同的输出进行散列会产生不同的结果 以下是相关代码: $prehash = $salt + $user + $pass; $prehash = CryptoJS.enc.Utf8.parse($prehash); var sha3 = CryptoJS.algo.SHA3.create(); sha3.up

我们使用Crypto JS SHA3将用户名和密码散列在一起

该函数从用户名和密码的两个html输入字段中获取输入,将它们与salt连接起来,并对它们进行散列。第一个散列成功工作,但是再次对相同的输出进行散列会产生不同的结果

以下是相关代码:

$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
编辑:我们在另外两台设备上进行了测试,发现在另外两台设备上得到了正确的输出。这种行为只在我同事的电话中观察到。现在我们更困惑了。有人知道为什么不同的设备会产生不同的输出吗


编辑:下面是一个JSFIDLE,它演示了这个问题。它应该是真的&真的。在我们的android 4.2.2设备上,它的读数为false和false,我们无法找到这个问题的解决方案,所以我们在crypto js项目上打开了一个bug,同时我们正在使用一个不同的哈希算法,不确定它是否能解决您的问题,但是这个代码不能简化为
var password=CryptoJS.SHA3($prehash);?根据文档
“当您在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串”
。因此,如果您只想将哈希值作为十六进制值,那么实际上没有必要将其显式转换为字符串。@PatrickQ最初就是这样做的,我们这样做只是为了揭开面纱,确保我们确实知道发生了什么,因为我们仍然对发生这种情况的原因感到困惑。我每次都会记录相同的散列。和@PatrickQ一样:我无法复制,你的环境是什么?在它不工作的情况下,用户代理是什么?