MD5加密算法不需要自己去实现,java提供了java.security.MessageDigest类。
关于MessageDigest类 --待补充
官方文档地址:https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html
MessageDigest类主要提供信息摘要算法功能,如常见的MD5、SHA-1和SHA-256等,信息摘要单向的散列函数,只能够进行加密,不能解密,因此在使用的时候一般是直接将目标对象采用md5加密后直接与数据库对比。
1.创建MessageDigest实例
修饰符和类型 | 方法名称和描述 |
static MessageDigest | getInstance(String algorithm) 返回指定摘要算法的MessageDigest对象 |
algorithm表示的是摘要算法名称,主要有MD2、MD5、SHA-1 、SHA-224 、SHA-256 、SHA-384 、SHA-512
//创建MD5摘要算法
MessageDigest md5 = MessageDigest.getInstance("MD5");
实现过程
主要分三个部分:
1.将字符串转换为字节流,
2.调用digest()方法对指定字节流进行加密
3.将加密后的字节流转换为16进制格式的字符串,(可根据自己需要选择转换成对应格式字符串)
代码如下:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class EncodeUtil {
/**
* 将字符串以md5加密
* @param str
* @return 32位字符串
*/
public static String encodeByMD5(String str) {
byte[] bytes = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
// System.out.println(md5.getDigestLength()); //16
bytes = md5.digest(str.getBytes("utf-8"));
} catch (NoSuchAlgorithmException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
LogHelper.logError(e); //log4j日志输出,可注释
} catch (UnsupportedEncodingException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return bytesTo16BString(bytes);
}
private static String bytesTo16BString(byte[] bytes) {
StringBuffer res = new StringBuffer();
int num = 0;
for(int i=0;i<bytes.length;i++) {
num = bytes[i]>0?bytes[i]:255+bytes[i];
String hex = Integer.toHexString(num);
res.append(hex.length()<2?0+hex:hex);
}
return res.toString();
}
}