我遇到了一个奇怪的问题,它与 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/