引入一个依赖

<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>

工具类MD5Utils .java

import org.apache.commons.codec.digest.DigestUtils;

import java.util.UUID;

public class MD5Utils {

//创建md5对象
public static String md5(String code) {
return DigestUtils.md5Hex(code);
}

//进行密码校验 用户输入的密码 数据库中的密码 数据库中的盐
public static boolean checkPassword(String userCode, String dbCode, String salt) {
if (dbCode.equals(md5(userCode+salt))) {
return true;
} else {
return false;
}
}

//获得UUID
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}

//获得盐值
public static String getSalt() {

return MD5Utils.getUUID().substring(0, 5);
}

}

用户注册时的密码加密

//添加
public void add(User user) {
user.setId(MD5Utils.getUUID());
//加盐,并将加过盐的密码 和盐重新存入数据库中
String salt = MD5Utils.getSalt();
String password = MD5Utils.md5(user.getPassword()+salt);
user.setPassword(password);
user.setSalt(salt);
userDAO.insert(user);
}

用户登录时的密码校验

//根据账号密码查询
public void myTest(){
String message = null;
String password = "123456";
// 先根据用户名获得这个用户信息,包括密码
// 然后将用户输入的密码重新按原来的加密方式加密之后与数据库中查出来的密码进行比对
Map<String, Object> map = new HashMap<>();
map.put("username","小黑");
List<User> users = userService.selectByMap(map);
if(users != null || users.size() != 0){
User user = users.get(0);
//获取该用户的盐
String salt = user.getSalt();
//将用户输入的密码与数据库中的密码比对
boolean b = MD5Utils.checkPassword(password, user.getPassword(), salt);
//判断该密码是否与数据库中的密码一致
if(b){
message = "登录成功";
}else{
message = "密码不正确";
}
}
System.out.println(message);
}

 

用 Shiro 的话更简单

public void add(User user) {
String id = UUID.randomUUID().toString().replace("-", "");
user.setId(id);
user.setCreateDate(new Date());
user.setLastUpdateDate(new Date());
//shiro 进行密码加密
String salt = Md5Utils.getSalt();
// 参数 用户输入的密码 盐 散列次数
Md5Hash md5Hash = new Md5Hash(user.getPassword(),salt,1024);
String password = md5Hash.toHex();

user.setPassword(password);
user.setSalt(salt);
userDAO.insert(user);
}