将加密后的数据转换为16进制32位的字符串:
private static final char HEX_DIG[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public static void main(String[] args) throws Exception{
//初始化加密器
MessageDigest md5 = MessageDigest.getInstance("MD5");
//获取字节数组
byte[] resource = "123".getBytes();
//得到加密后的字节数组
byte[] result = md5.digest(resource);
//转化为16进制32位的字符串
System.out.println(getHexString(result));
}
static String getHexString(byte[] b){
StringBuilder sb = new StringBuilder();
for(int i= 0; i<b.length;i++){
sb.append( HEX_DIG[b[i]& 0xf0 >>>4]);
sb.append( HEX_DIG[b[i]& 0x0f]);
}
return sb.toString();
}
密码和一段字符串相加进行编码可增加破解的难度:
private static final String key = "282328392839283928";
public static String md5(String password){
try {
MessageDigest md = MessageDigest.getInstance("md5");
//密码和字符串相加增加破解的难度
byte md5[] = md.digest((key+password).getBytes());
//进行BASE64编码
BASE64Encoder base64 = new BASE64Encoder();
//明文字符串
return base64.encode(md5);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}