在php中md5加密方式返回的结果有两种,一种是16进制的,一种是2进制的,
java中大家一般也习惯16进制的,实际上在某些情况下大家有时候并不会将其转为16进制的结果输出,而是返回2进制的,然后再对2进制的结果进行base64加密
这样再作为最终存储结果(或者说是加密后的结果)
package com.client;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
public class MD5Util {
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
/**
* 字符串加密为16进制数据
* @param origin
* @param charsetname
* @return
*/
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString;
}
/**
* 字符串加密为二进制数据
* @param origin
* @param charsetname
* @return
*/
public static byte[] getMD5Str(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException caught!");
System.exit(-1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return messageDigest.digest();
}
public static void main(String[] args) {
String s = "123456";
System.out.println(getMD5Str(s));
byte [] temp = getMD5Str(s);
for(int i=0;i<temp.length;i++){
System.out.println(temp[i]);
}
System.out.println(new BASE64Encoder().encode(getMD5Str(s)));
}
}