Java和php5 MD5 Hash之间的区别

1 php java md5

我面临着一个奇怪的问题,它与Java和php5中的MD5-Hashes有关.我认为在某些情况下,以下代码不会生成正确的MD5哈希值:

public static String getMD5Hash(String string)
{
    try 
    {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(string.getBytes());
        byte[] digest = md5.digest();

        string = byteArrToHexString(digest);
    } 
    catch (NoSuchAlgorithmException e1) 
    {
        e1.printStackTrace();
    }

    return string;
}

private static String byteArrToHexString(byte[] bArr)
{
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < bArr.length; i++) 
    {
        int unsigned = bArr[i] & 0xff;
        sb.append(Integer.toHexString((unsigned)));
    }

    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

我不得不迁移现有的用户数据库,其中密码存储在php5 MD5中.现在,一些用户(不是所有用户)无法登录,因为我的Java代码没有生成正确的MD5哈希.

任何想法上面有什么问题?

laa*_*lto 10

byteArrToHexString 没有正确转换字节<0x10,你需要用零填充它们.

例:

int unsigned = bArr[i] & 0xff;
if (unsigned < 0x10)
  sb.append("0");
sb.append(Integer.toHexString((unsigned)));
Run Code Online (Sandbox Code Playgroud)