Java ve php5 MD5 Hash arasındaki fark

3 Cevap java

I'm facing kind of a strange issue which is related MD5-Hashes in Java and php5. I figured that unter certain circumstances the following code does not generate correct MD5 hashes:

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();
}

I had to migrate an existing user database where the passwords where stored in php5 MD5. Now some of the users, not all, can't login because my Java code does not produce the correct MD5 hash.

Herhangi bir fikir üzerinde nesi var?

3 Cevap

byteArrToHexString bayt dönüştürmek değil

Örnek:

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

Çok komik ... Ben sadece Parolaları kendimi karma MD5 ile bir sorunla karşılaştı. Benim durumumda sorun byte[] içine orijinal şifre kodlama oldu.

Ben yukarıda önceden şifreleri karma için kullanılan exactly hangi kodlama öğrenmek için tavsiye ve kod değişikliği hattı 6

md5.update(string.getBytes("UTF-8"));

(Tabii ki, bu bir parametre olarak kullanmak doğru charset'in öğrenmek ... sadece bir örnektir)

BTW, ben size nedenleri var herhalde, ama neden karma yöntemi bunu yok?

return new String(digest, "UTF-8");

Yuval = 8-)

Eksik:

md5.reset();

bir güncelleme yapmadan önce ()

Giriş Java md5 example with MessageDigest