如何在php中复制java的ByteBuffer.putLong?

时间:2011-08-08 12:55:13

标签: java php

我需要从内容由java应用程序设置的mysql数据库中访问php数据,以便计算正确的用户哈希值。

我似乎无法使用php复制代码,我认为我的问题在于我知道PHP无法处理的长值

到目前为止我所拥有的:

<?php
$g_salt = 'the global salt';
$u_salt = "-2413991061102778232";
$pass = "the password";

$tmp = '';
for ($i = 0; $i < strlen($u_salt); $i++) {
 $tmp .= ord($u_salt[$i]);
}
$u_salt = $tmp;

$buffer = $g_salt.$u_salt.$pass;
$hash = bin2hex(mhash(MHASH_SHA256, $buffer));

var_dump($hash);
var_dump("1ee103abe2595681d35c11a27f6dc03a02c5a6ebe01f8abcd7d634a25e050b49");

我知道如何修复我的代码吗?非常感谢提前

2 个答案:

答案 0 :(得分:1)

ByteBuffer.putLong将salt作为二进制编号写为big-endian顺序的8个字节。您在PHP中所做的事情是完全不同的 - 似乎您正在使用salt的10字符串表示形式,然后连接每个的ascii值的 base-10表示的人物。在任何一个cae中,这都是一件毫无意义的事情。

答案 1 :(得分:0)

这是否符合您的要求?

$hash = hash("sha256", $g_salt . $u_salt. $pass);

这只是对提供的字符串(连接)执行sha256哈希,并返回存储在$ hash变量中的十六进制值。如果您愿意,可以使用其他参数获取二进制文件。

http://www.php.net/manual/en/function.hash.php