MD5加密算法
-
数据摘要算法
在企业级开发过程中,有很多重要信息,是需要加密后存储的。
目前在行业中,应用最广泛的加密算法是数据摘要算法 也称作数据指纹算法。
数据摘要算法有很多,目前比较流行的是 MD5 SHA1 SHA512等等。
课上使用MD5,其他算法其实也差不多。
数据摘要算法的特点:
任何二进制,经过MD5算法机密之后,可以得到一个128位的二进制值,通常写成32位十六进制。
原文相同,算出的MD5密文一定相同,原文不同,算出的MD5密文一定不同(可能重复,但概率非常低)。且,MD5值没有任何规律。
只能由明文算出密文,密文永远无法算回明文(实际上是可以算的,只是计算量太大,目前的计算机无法在可接受的的时间内完成)。
数据摘要算法的主要应用场景:
数据库中密码加密
下载文件时文件的校验
网盘的秒传
… -
MD5的实现
a. mysql数据库中
MD5()函数可以实现md5算法
b. java中
package com.easymall.utils;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
*使用md5的算法进行加密
*/
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5")
.digest(plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}
-
改造EasyMall使用MD5加密
a. 数据库中user表密码都要变为MD5加密update user set password = MD5(password);
b. 改造EasyMall注册功能,密码加密后存储
package cn.tedu.web;
import cn.tedu.domain.User;
import cn.tedu.exception.MsgException;
import cn.tedu.service.UserService;
import cn.tedu.utils.MD5Utils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* 注册
*/
@WebServlet(urlPatterns = "/RegistServlet")
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.解决乱码