所以这是一个已经存在的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
感谢。
答案 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)));