如果字节表示小于 0x10,则从 md5() PHP 中删除 0

发布于 2024-10-28 21:05:17 字数 781 浏览 1 评论 0原文

在 PHP 中使用 md5() 函数直接给出字符串。在将字符串保存到数据库之前,我想要做的是删除零 0(如果该十六进制的字节表示中存在任何零),并且该字节表示 <= 0x10,然后将该字符串保存到数据库中。

我怎样才能在 PHP 中做到这一点?

MD5 - PHP - 原始值 - catch12 - 214423105677f2375487b4c6880c12ae - 这就是我现在得到的。以下是我希望 PHP 保存在数据库中的值。

MD5 - 原始值 - catch12 - 214423105677f2375487b4c688c12ae

想知道为什么吗?我在 Android 应用程序中用于登录和注册的 MD5 代码我没有为条件 if ((b & 0xFF) < 0x10) hex.append("0"); 附加零美好的。但网站中的“忘记密码”功能是 PHP,如果用户重置密码,就会发生不匹配的情况。 JAVA代码如下。

byte raw[] = md.digest();  
StringBuffer hexString = new StringBuffer();
for (int i=0; i<raw.length; i++)
hexString.append(Integer.toHexString(0xFF & raw[i]));
v_password = hexString.toString();

PHP 方面的任何帮助都将非常有帮助,以免发生不匹配。我无法更改应用程序代码,因为这会给现有用户带来问题。

谢谢。

Using md5() function in PHP directly gives me the String. What I want to do before saving the string in the database is remove zeroes 0 if any in the byte representation of that hex and that byte representation is < 0x10 and then save the string in the database.

How can I do this in PHP?

MD5 - PHP - Raw Value - catch12 - 214423105677f2375487b4c6880c12ae - This is what I get now. Below is the value that I want the PHP to save in the database.

MD5 - Raw Value - catch12 - 214423105677f2375487b4c688c12ae

Wondering why? The MD5 code I have in my Android App for Login and Signup I did not append zeroes for the condition if ((b & 0xFF) < 0x10) hex.append("0"); Works fine. But the Forgot Password functionality in the site is PHP which is when the mismatch happens if the user resets password. JAVA code below.

byte raw[] = md.digest();  
StringBuffer hexString = new StringBuffer();
for (int i=0; i<raw.length; i++)
hexString.append(Integer.toHexString(0xFF & raw[i]));
v_password = hexString.toString();

Any help on the PHP side so that the mismatch does not happen would be very very helpful. I can't change the App code because that would create problems for existing users.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

余厌 2024-11-04 21:05:17

将“正常”MD5 哈希值传递给此函数。它将把它解析成单独的字节对并去掉前导零。

编辑:修复了拼写错误

function convertMD5($md5)
{
    $bytearr = str_split($md5, 2);
    $ret = '';

    foreach ($bytearr as $byte)
        $ret .= ($byte[0] == '0') ? str_replace('0', '', $byte) : $byte;

    return $ret;
}

或者,如果您不希望完全剥离零字节(如果您希望 0x00 为“0”),请使用此版本:

function convertMD5($md5)
{
    $bytearr = str_split($md5, 2);
    $ret = '';

    foreach ($bytearr as $byte)
        $ret .= ($byte[0] == '0') ? $byte[1] : $byte;

    return $ret;
}

Pass the "normal" MD5 hash to this function. It will parse it into the individual byte pairs and strip leading zeros.

EDIT: Fixed a typo

function convertMD5($md5)
{
    $bytearr = str_split($md5, 2);
    $ret = '';

    foreach ($bytearr as $byte)
        $ret .= ($byte[0] == '0') ? str_replace('0', '', $byte) : $byte;

    return $ret;
}

Alternatively, if you don't want zero-bytes completely stripped (if you want 0x00 to be '0'), use this version:

function convertMD5($md5)
{
    $bytearr = str_split($md5, 2);
    $ret = '';

    foreach ($bytearr as $byte)
        $ret .= ($byte[0] == '0') ? $byte[1] : $byte;

    return $ret;
}
眸中客 2024-11-04 21:05:17
$md5 = md5('catch12');
$new_md5 = '';
for ($i = 0; $i < 32; $i += 2)
{
  if ($md5[$i] != '0') $new_md5 .= $md5[$i];
  $new_md5 .= $md5[$i+1];
}

echo $new_md5;
$md5 = md5('catch12');
$new_md5 = '';
for ($i = 0; $i < 32; $i += 2)
{
  if ($md5[$i] != '0') $new_md5 .= $md5[$i];
  $new_md5 .= $md5[$i+1];
}

echo $new_md5;
面犯桃花 2024-11-04 21:05:17

去除前导零(00->0、0a->a、10->10)

function stripZeros($md5hex) {
  $res =''; $t = str_split($md5hex, 2);
  foreach($t as $pair) $res .= dechex(hexdec($pair));
  return $res;  
  }

去除前导零和零字节(00->无、0a->a、10->10)

function stripZeros($md5hex) {
  $res =''; $t = str_split($md5hex, 2);
  foreach($t as $pair)  {
    $b = dechex(hexdec($pair));
    if ($b!=0) $res .= $b;
    }
  return $res;  
  }

To strip leading zeros (00->0, 0a->a, 10->10)

function stripZeros($md5hex) {
  $res =''; $t = str_split($md5hex, 2);
  foreach($t as $pair) $res .= dechex(hexdec($pair));
  return $res;  
  }

To strip leading zeros & zero bytes (00->nothing, 0a->a, 10->10)

function stripZeros($md5hex) {
  $res =''; $t = str_split($md5hex, 2);
  foreach($t as $pair)  {
    $b = dechex(hexdec($pair));
    if ($b!=0) $res .= $b;
    }
  return $res;  
  }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文