2014-10-28 318 views
0

我在JAVA中定义了一个md5函数,并使用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

您没有通过您的sourceStringMessageDigest.digest(byte[])功能,因此您只能得到空输入的摘要。我想你想要的东西一样,

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

我的错......你说得对。 – HornedReaper 2014-10-28 03:14:01

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散列。 如果你想在java中获得md5 hash作为字符串,你可以这样写 – 2017-04-19 04:40:46