加密/MD5算法/盐值
- 其他
- 2025-07-23 10:33:01

目录
加密的介绍
MD5算法
盐值
加密的介绍
加密介绍:在MySQL数据库中, 我们常常需要对密码, 身份证号, 手机号等敏感信息进行加密, 以保证数据的安全性。 如果使用明文存储, 当黑客入侵了数据库时, 就可以轻松获取到用户的相关信息, 从而对用户或者企业造成信息泄漏或者财产损失。
加密算法:对称加密、非对称加密、摘要算法。
1. 对称密码算法:是指加密秘钥和解密秘钥相同的密码算法
2. 非对称密码算法 是指加密秘钥和解密秘钥不同的密码算法. 该算法使用一个秘钥进行加密, 用另外一 个秘钥进行解密。
摘要算法:把一个不固定长度的字符串,通过一定的算法,变成固定长度的字符串。(不可逆的,无法解密)
MD5算法MD5算法就是摘要算法的一种
缺陷:虽然经过MD5加密后的密文无法解密, 但由于相同的密码经过MD5哈希之后的密文是相同的, 当密码位数简单时,黑客可以事先建立好对应的数据库进行比对,从而破解密码。
盐值解决方案: 采用为一个密码拼接一个随机字符来进行加密, 这个随机字符我们称之为"盐". 假如有⼀个加盐后的加密串,黑客通过一定手段对这个加密串, 他拿到的明文并不是我们加密前的字符串, 而是加密前的字符串和盐组合的字符串, 这样就增加了字符串的安全性。
实现加密
1.存储随机盐值
2.存储加密后的密文
3.加密算法(MD5)
写加密/解密工具类
public class SecurityUtils { /** * 加密 * @param password 明文密码 * @return 盐值+密文 */ public static String encrypt(String password){ //生成随机盐值 String salt = UUID.randomUUID().toString().replace("-",""); System.out.println(salt); //加密 盐值+明文 String securityPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes()); //数据库中存储 盐值+密文 return salt+securityPassword; } /** * 校验 * @return */ public static boolean verify(String inputPassword, String sqlPassword){ //取出盐值 if (sqlPassword ==null || sqlPassword.length()!=64){ return false; } String salt = sqlPassword.substring(0,32); //得到密文 String securityPassword = DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes()); return (salt+securityPassword).equals(sqlPassword); } public static void main(String[] args) { String finalPassword = encrypt("123456"); System.out.println(finalPassword); System.out.println(verify("123456",finalPassword)); } }修改一下数据库密码,使用测试类给密码123456(假设我们的数据库密码为123456)生成密文:
随机盐值:
有分割杠,容易被黑客识别,去掉中间的分割杠。由于去掉后本就分不清密文和随机盐值,再加上存储的顺序可以是千变万化的,更加不容易破解密码。
修改数据库明文密码为密文, 执行SQL:
update user set password=''; //数据库 password修改成生成的密文登录接口:
@RequestMapping("/login") public Result login(String userName, String password){ //1.参数校验 //2.密码校验 //3.生成token并返回 if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){ return Result.fail("用户名或密码为空"); } //获取数据库中的密码 UserInfo userInfo=userService.queryByName(userName); if(userInfo==null ||userInfo.getId()<0){ return Result.fail("用户不存在"); } //校验密码 if (!SecurityUtils.verify(password, userInfo.getPassword())){ return Result.fail("密码错误!"); } //生成token并返回 Map<String,Object> claim=new HashMap<>(); claim.put("id",userInfo.getId()); claim.put("name",userInfo.getUserName()); String token= JwtUtils.genToken(claim); return Result.success(token); }加密/MD5算法/盐值由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“加密/MD5算法/盐值”