将cryptojs MD5脚本转换为PHP

时间:2015-05-18 05:49:54

标签: javascript php hash md5 cryptojs

我有一段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 PHPSHA512 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

0 个答案:

没有答案