密码MD5加盐加密----注册、校验、修改模块

思路:
    单纯的MD5加密容易被碰撞破解,考虑将密码加上一个随机字符串(盐),再一同进行MD5加密,提高安全性。
此时,盐相当于另一半秘钥,需将盐一同存入数据库,用以验证。

实现过程:
    一、编写MD5工具类
    二、新增用户时的密码模块
    三、登录校验密码模块
    四、修改用户信息的修改密码模块

一、编写MD5工具类

public class MD5Util {
    
    
	//生成6位随机字符串的盐,由数字、大小写字母组成
	public static String getSaltString(){
    
    
		String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		Random random=new Random();
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<6;i++){
    
    
			int num=random.nextInt(str.length());
			sb.append(str.charAt(num));
		}
		return sb.toString();
	}
	
	//把密码 + 盐 ,一同经过MD5加密
	public static String toMD5String(String str,String salt){
    
    
		try{
    
    
			return Hex.encodeHexString(DigestUtils.md5(str+salt));
		}catch(Exception e){
    
    
			return null;
		}
	}
}

二、新增用户时的密码模块

//******
//获取随机盐
String salt=MD5Util.getSaltString();
//密码、盐一起加密,将加盐加密的密码存入库
user.setPassword(MD5Util.toMD5String(user.getPassword(),salt));
//盐一起存入库
user.setSalt(salt);
userService.insertUsers(user);

三、登录校验密码

//******
//username:前端传来的用户名
//password:前端传来的待校验明文密码
//user:库用户信息
User user = userService.getUsersByName(userName).get(0);		
//将明文与盐加密后,与库里的密文相比较,相同则密码正确
if(user.getPassword().equals(MD5Util.toMD5String(password,user.getSalt()))){
    
    
	session.setAttribute("user", user);
	return "toIndex.do";	
}else{
    
    
	return "密码不正确!";
}

四、修改用户信息的修改密码模块

//user:前端传来的待修改的用户对象
//oldUser:数据库里对应的用户对象
//isPswUnchanged:前端传来的参数,用户是否修改密码,没修改true,修改false
//(就是为了判断用户密码是否被修改,也可以在后端判断)
User oldUser=(User)userMapper.selectByPrimaryKey(user.getUserId());
//待校验的密文串 = 用户输入的明文密码串+盐 ,再MD5加密
String password=MD5Util.toMD5String(user.getPassword,oldUser.getSalt);
//修改了密码
if(!isPswUnchanged&&!oldUser.getPassword().equals(password)){
    
    
	String salt=MD5Util.getSaltString();
	user.setPassword(MD5Util.toMD5String(user.getPassword(),salt));						   
	user.setSalt(salt);
}else{
    
    
	//未修改密码
	user.setPassword(oldUser.getPassword());
	user.setSalt(oldUser.getSalt());
}
userService.updateUser(user);

    到此为止,MD5加盐加密的新增、校验、修改几个模块就都结束了。

    在此插入我对管理员修改用户信息模块的一个思考:
    需求: 管理员获取所有用户列表,实现对用户的增删改操作,包括修改密码操作。

    那么后端在返回所有用户列表时,应注意不能将密码、盐等敏感信息传给前端。

猜你喜欢

转载自blog.csdn.net/qq_38118138/article/details/118087040
今日推荐