java md5 hash,php函数检查

时间:2012-01-10 16:26:25

标签: java php hash md5

所以这是一个已经存在的java函数

StringBuffer sbTemp = new StringBuffer();
byte[] btTypeInPasswd = this.md.digest(this.password.getBytes());

for (int i = 0; i < btTypeInPasswd.length; i++)
  sbTemp = sbTemp.append(btTypeInPasswd[i]);

this.password = sbTemp.toString();
如果密码是test,则

this.password将包含如下字符串:-8774-113-27-52-79-101-9028768115-45-111-23-121-10447-69-45

我需要的是一个PHP函数来产生相同的结果,可以这样做吗?

不能编辑java .class文件,因为这是我希望通过访问现有数据库来协同工作的现有应用程序的一部分。

这就是我的尝试。

$bytes = md5("test", true);
$bArray = array();

for ($x = 0; $x < strlen($bytes); $x++)
    $bArray[$x] = ord(substr($bytes, $x, 1));

print "<pre>" . implode('-', $numbers) . "</pre>";

然而,使用相同的密码“test”它产生:9-143-107-205-70-33-211-115-202-222-78-131-38-39-180-246完全不喜欢 - 8774-113-27-52-79-101-9028768115-45-111-23-121-10447-69-45

感谢。

4 个答案:

答案 0 :(得分:1)

所以不要感谢巨魔,如果其他人需要知道如何做到这一点就是这样。

function md5_hash($password)
{
    $hashArray = array();
    $hash = md5($password);

    for ($x = 0; $x < strlen($hash); $x += 2)
        $hashArray[$x] = (($dec = hexdec(substr($hash, $x, 2))) > 127 ? $dec - 256 : $dec);

    return implode("", $hashArray);
}

使用密码“test”将导致上述函数返回一个字符串:9-113107-517033-45115-54-3478-1253839-76-10

答案 1 :(得分:0)

PHP有一个内置的md5()函数,给定一个字符串返回一个32个字符的十六进制摘要,例如:

<? echo md5('test'); ?>

给出:

098f6bcd4621d373cade4e832627b4f6

因此,如果您修改Java代码以输出十六进制而不是十进制,则结果应该匹配。

答案 2 :(得分:0)

$md5 = md5('...... your string here ....');
$numbers = array();
for ($i = 0; $i < strlen($md5); $i++) {
   $numbers[i] = ord(substr($md5, $i, 1));
}

echo implode('-', $numbers);

答案 3 :(得分:0)

md5_hash函数上方一行,您可以执行以下操作:

$password  = implode("", unpack('c*', md5($password,true)));