对密码加密(MD5、BCrypt)
-
摘要加密
-
摘要加密:对数据进行哈希运算来生成一个固定长度的摘要(也称为哈希值或消息摘要)。
-
特点:不可逆,唯一性
-
场景:密码加密、数字签名
-
常见的加密算法:MD5、BCrypt
-
加密算法的工具类DigestUtils
-
MD5 DigestUtils.md5DigestAsHex("123456".getBytes()); 提供者cn.hutool.crypto.digest.BCrypt;
-
BCrypt BCrypt.hashpw("123456", BCrypt.gensalt()); 提供者 cn.hutool.crypto.digest.BCrypt;
-
-
MD5加密 VS BCrypt加密
MD5 | BCrypt |
---|---|
长度是32 | 长度是60 |
同一个字符串加密多次都是相同的 | 同一个字符串加密多次是不同的 |
-
代码测试
package com.zzyl.test;
import cn.hutool.crypto.digest.BCrypt;
import org.springframework.util.DigestUtils;
public class PasswordTest {
public static void main(String[] args) {
//md5加密
String md5Pswd1 = DigestUtils.md5DigestAsHex("123456".getBytes());
String md5Pswd2 = DigestUtils.md5DigestAsHex("123456".getBytes());
System.out.println(md5Pswd1);
System.out.println(md5Pswd2);
System.out.println(md5Pswd1.equals(md5Pswd2));
System.out.println("-------------------------------------");
String password1 = BCrypt.hashpw("123456", BCrypt.gensalt());
String password2 = BCrypt.hashpw("123456", BCrypt.gensalt());
System.out.println(password1);
System.out.println(password2);
System.out.println(password1.equals(password2));
}
}
输出的结果如下:
e10adc3949ba59abbe56e057f20f883e
e10adc3949ba59abbe56e057f20f883e
true
-------------------------------------
$2a$10$rkB/70Cz5UvsE7F5zsBh8O2EYDoGus3/AnVrEgP5cTpsGLxM8iyG6
$2a$10$QIefMa.FmFIb2k2S9/jO7e1S3b0aeXCMtGS/ArKUyt6q28deYQrfy
false
-
md5对于同一个字符串加密多次都是相同的
-
BCrypt对于同一个字符串加密多次是不同的,主要是因为添加了随机盐(随机字符串),更加安全
其中BCrypt提供了一个方法,用于验证密码是否正确
boolean checkpw = BCrypt.checkpw("123456", "$2a$10$rkB/70Cz5UvsE7F5zsBh8O2EYDoGus3/AnVrEgP5cTpsGLxM8iyG6");
-
返回值为true,表示密码匹配成功
-
返回值为false,表示密码匹配失败
-
新增用户-密码加密
我们知道了密码加密之后,当创建用户的时候,就需要给用户设置默认的密码
-
默认密码为:888itcast.CN764%...
-
存储到数据库之后为加密之后的密文,效果如下:
String password = "888itcast.CN764%...";
user.setPassword(BCrypt.hashpw(password,BCrypt.gensalt()));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)