2011-03-31 18 views
5

मैं इस प्रकार एंड्रॉयड/जावा में MD5 की गणना कर रहा हूँ:PHP में MD5 फ़ंक्शन के एंड्रॉइड/जावा समकक्ष क्या होगा?

byte raw[] = md.digest(); 
StringBuffer hexString = new StringBuffer(); 
for (int i=0; i<raw.length; i++) 
    hexString.append(Integer.toHexString(0xFF & raw[i])); 
v_password = hexString.toString(); 

लेकिन वहाँ PHP के md5() समारोह के साथ एक बेमेल है।

 
MD5 - PHP - Raw Value - catch12 - 214423105677f2375487b4c6880c12ae 
MD5 - JAVA - Raw Value - catch12 - 214423105677f2375487b4c688c12ae 

यह कैसे के कारण होता है और मैं इसे कैसे हल कर सकते हैं इसलिए है कि दोनों एंड्रॉयड/जावा और PHP ठीक उसी MD5 हैश उत्पन्न?

उत्तर

17

बाइट 0x10 से कम होने पर आपको 0 के साथ हेक्स मान को उपसर्ग करने की आवश्यकता है। यहां एक पूर्ण उदाहरण दिया गया है:

public static String md5(String string) { 
    byte[] hash; 

    try { 
     hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); 
    } catch (NoSuchAlgorithmException e) { 
     throw new RuntimeException("Huh, MD5 should be supported?", e); 
    } catch (UnsupportedEncodingException e) { 
     throw new RuntimeException("Huh, UTF-8 should be supported?", e); 
    } 

    StringBuilder hex = new StringBuilder(hash.length * 2); 

    for (byte b : hash) { 
     int i = (b & 0xFF); 
     if (i < 0x10) hex.append('0'); 
     hex.append(Integer.toHexString(i)); 
    } 

    return hex.toString(); 
} 
संबंधित मुद्दे