背景
用户管理是一个项目要提供的基本功能,一个用户的基本信息包括登录名和密码。
并且密码以明文方式存在数据库是不合理的,必须加密。
密码存储发展过程
-
第一代密码
用户名和密码以明文方式存在数据库中。(容易泄露)
-
第二代密码
对用户的密码加密处理后存储在数据库中。(但是密码不够复杂,还是会被破解)
-
第三代密码
对用户的信息,增加了一个字段:盐值 salt
Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt)
密码加密方式
在加密算法上,可以使用MD5加密算法,原因有二:
1. 这个算法是单向的,即使得到密文,也无法推断出明文。
2. 无论密码有多长,通过MD5计算之后得到的是一个固定长度的结果,有利于数据库的设计。
实例实现
import org.springframework.util.DigestUtils;
import com.bdp.commons.utils.StringUtils;
public class Md5 {
public static String getMd5(long seckillId) {
// 加入一个盐值,用于增加密码破解难度
String salt = StringUtils.getUUId();
String base = seckillId + salt;
//获取加密后的密码
String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
return md5;
}
}