java - Java和php5 MD5 Hash的区别

标签 java php 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();
}

我不得不迁移一个现有的用户数据库,其中存储了密码 在 php5 MD5 中。现在一些用户,不是全部,不能登录,因为我的 Java 代码 不会产生正确的 MD5 散列。

以上内容有什么问题吗?

最佳答案

byteArrToHexString 无法正确转换字节 <0x10,您需要用零填充它们。

例子:

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

关于java - Java和php5 MD5 Hash的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057041/

相关文章:

java - 如何向嵌套 HashMap 中插入记录?

php - 无法连接 MYSQL,我做错了什么?

php - 将对象评估为 bool 值

http - 在 Jmeter 中如何使用 MD5Hex 断言来验证下载的文件?

java - JSON 格式说明换行符

java - Android 如何在得到一个结果时停止递归函数

java - JAXB 默认值

php - 如何登录成功?

python - 如何使用 boto 以编程方式获取 Amazon S3 文件的 MD5 校验和

sql - 如何使用 DBMS_OBFUSCATION_TOOLKIT.MD5 将 VARCHAR2 散列为字母数字