我有一段javascript,有人编写这个javascript,将ID转换为程序使用的特定哈希ID。
请注意,javascript输出无法更改。它复制了上述第三方程序完成的散列。我试图在PHP中同样复制散列。
我的目标是将其转换为PHP,因此我可以在一些后端脚本中运行转换。
但是,它使用了cryptoJS库,我无法找到将其正确转换为PHP的方法,因为cryptoJS中的MD5似乎有一个传递给它的数组,并且PHP MD5传递了一个字符串。请参阅下面的一些代码示例
他们有什么(javascript)
var id = bigInt(12345678912345678);
var parts = [0x42,0x45,0,0,0,0,0,0,0,0];
for (var i = 2; i < 10; i++) {
var res = id.divmod(256);
id = res.quotient;
parts[i] = res.remainder.toJSNumber();
}
var wordArray = CryptoJS.lib.WordArray.create(new Uint8Array(parts));
$("#newid").val(CryptoJS.MD5(wordArray));
我在PHP中获得了什么
$id = 12345678912345678;
$parts = [0x42,0x45,0,0,0,0,0,0,0,0];
for ($i=2; $i < 10; $i++){
$quo = (int)($id / 256);
$rem = $id % 256;
$id = $quo;
$parts[$i] = $rem;
}
$hash = md5($parts);
echo $hash;
这当然会因MD5没有数组而返回错误。
我尝试了一些简单的东西,例如join()数组,但是它没有返回相同的哈希。
我已经查看了cryptoJS库,我已经完成了大量的谷歌搜索,并查看了SO(包括Generate the same MD5 using javascript and PHP,SHA512 hashes differ on android, php and javascript等)但是可以&好像找到了回答这个问题的任何东西。
我有一种感觉,问题是我没有准确理解wordAray是什么传递到MD5(因此无法在PHP中正确复制)......但我对cryptoJS不够熟悉图书馆肯定。
一些输出......
ID used: 12345678912345678
using join('',$parts)
PHP: d378d1609e6a2854b129b012aa6363ea
JS: 61bb919806ee7c4ad6f781b49a89dfcf
using json_encode($parts)
PHP: 3e2393c173558194b6ba1bbedc9314e1
JS: 61bb919806ee7c4ad6f781b49a89dfcf