Java和php5 MD5哈希之间的php差异
我面临一个奇怪的问题,它与Java和php5中的MD5哈希有关。 我认为在某些情况下,下面的代码不会 生成正确的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哈希
你知道上面有什么问题吗
# 1 楼答案
byteArrToHexString
不转换字节<;0x10正确,您需要用零填充它们例如:
# 2 楼答案
真有趣。。。我自己刚刚遇到了MD5哈希密码的问题。我的问题是将原始密码编码为
byte[]
我建议您准确地找出以前用于散列密码的编码,并将上面代码的第6行更改为
(当然,这只是一个示例……找出要用作参数的正确字符集)
顺便说一句,我想你有你的理由,但为什么不让散列方法这样做呢
Yuval=8-)
# 3 楼答案
您缺少:
在执行更新()之前
检查Java md5 example with MessageDigest
# 4 楼答案
我找到了两个解决方案(从here和其他答案中找到):
根据一些基准测试,我可以说
md5
函数的速度大约是md5Hex
函数的两倍。以下是测试:gradle文件包含以下内容: