【问题标题】:java md5 hash, php function to checkjava md5 hash,php函数检查
【发布时间】:2012-01-10 16:26:24
【问题描述】:

所以这里是一个已经存在的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>";

但是使用相同的密码“测试”它会产生: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

谢谢。

【问题讨论】:

  • 天哪,我犯了一个错误,没有发布我尝试过的内容,我只是假设每个人都会认为我已经尝试过诸如 ord、pack/unpack 等显而易见的东西……我的错。

标签: java php hash md5


【解决方案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

【讨论】:

  • 巨魔在 stackoverflow 上免费运行。
【解决方案2】:

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

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

给予:

098f6bcd4621d373cade4e832627b4f6

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

【讨论】:

  • 这不是一个选项,因为我无法控制 java 代码,因为它是现有应用程序的一部分,所以它已经一成不变,我只想在 PHP 中与它一起工作,访问它的现有数据库.
【解决方案3】:
$md5 = md5('...... your string here ....');
$numbers = array();
for ($i = 0; $i < strlen($md5); $i++) {
   $numbers[i] = ord(substr($md5, $i, 1));
}

echo implode('-', $numbers);

【讨论】:

  • 这不起作用我不得不编辑你的功能有点像这样$md5 = md5("test", true); $numbers = array(); for ($i = 0; $i &lt; strlen($md5); $i++) $numbers[$i] = ord(substr($md5, $i, 1)); print "&lt;pre&gt;" . implode('-', $numbers) . "&lt;/pre&gt;"; 但是会产生:9-143-107-205-70-33-211-115-202- 222-78-131-38-39-180-246
【解决方案4】:

以上md5_hash函数在一行中,你可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多