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

Aak*_*ash 5 php md5

在PHP中使用md5()函数直接给我String.在将数据库保存到数据库之前,我想要做的是删除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();
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Uns*_*ned 2

将“正常”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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

    return $ret;
}
Run Code Online (Sandbox Code Playgroud)