MD5加密算法是消息摘要算法的一种,它将任意输入即消息处理成16为长度的二进制数组即摘要,保证不同的消息产生的摘要不一样,而且很难通过摘要反推出消息。一般用它来验证信息是否被篡改;项目中也常用它来加密用户密码,保证密码安全性。
下面的程序利用JDK提供的MD5算法对字符串进行加密,然后对输出的二进制数组进行处理,变成对应的16进制字符串,方便使用。
public class MD5Encryptor {
/**
* MD5加密
* @param toEncryptToken
* @return
*/
public static String encrypt(String toEncryptToken) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(toEncryptToken.getBytes());
byte[] md = messageDigest.digest();
return toHexDigit(md);
} catch (Exception e) {
return null;
}
}
/**
* 将字节数组转换为十六进制字符串
* @param digits
* @return
*/
private static String toHexDigit(byte[] digits) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
char str[] = new char[digits.length * 2];
for (int i = 0, k = 0; i < digits.length; i++) {
// 前4位bit值用16进制表示
str[k++] = hexDigits[digits[i] >>> 4 & 0xf];
// 后4位bit值用16进制表示
str[k++] = hexDigits[digits[i] & 0xf];
}
return new String(str);
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
System.out.println(encrypt("12345678"));
System.out.println(encrypt("abc"));
}
}