2014-10-28 3 views
0

Я определяю функцию md5 в JAVA и использую функцию PHP: md5() для кодирования, но они выводят разные результаты.Различные между PHP md5 и JAVA md5

Я думаю, что что-то не так с моей функцией JAVA.

Вот код:

public static String MD5Encode(String sourceString) throws Exception { 
    MessageDigest md = MessageDigest.getInstance("MD5"); 
    byte[] bytes = md.digest(); 
    StringBuffer bf = new StringBuffer(bytes.length * 2); 
    for (int i = 0; i < bytes.length; i++) { 
     if ((bytes[i] & 0xff) < 0x10) { 
      bf.append("0"); 
     } 
     bf.append(Long.toString(bytes[i] & 0xff, 16)); 
    } 
    return bf.toString(); 
} 

ответ

0

Вы не прошли ваши sourceString функции MessageDigest.digest(byte[]), так что вы получите только переваренную пустой вход. Я думаю, что вы хотели что-то подобное,

byte[] bytes = md.digest(sourceString.getBytes("UTF-8")); 
+0

Моя ошибка ... ты прав. – HornedReaper

0
private static String MD5Encode(String sourceString) { 
try { 
byte[] bytesOfMessage = sourceString.getBytes("UTF-8"); 
MessageDigest md = MessageDigest.getInstance("MD5"); 
// byte array of md5 hash 
byte[] md5 = md.digest(bytesOfMessage); 
// we convert bytes to hex as php's md5() would do 
StringBuffer stringBuffer = new StringBuffer(); 
for (int i = 0; i < md5.length; i++) { 
stringBuffer.append(Integer.toString((md5[i] & 0xff) + 0x100, 
16).substring(1)); 
} 
return stringBuffer.toString(); 
} catch (Exception e) { 
} 
return null; 
} 
+0

Функция PHP md5() возвращает хеш md5 как шестнадцатеричный. Если вы хотите получить хеш-память md5 как строку в java, вы можете написать вот так: –

Смежные вопросы