BCrypt密码加密

1.作用

如果MYSQL数据库被盗,账号密码就全没了,所以要加密。还有可能蹲号子

BCrypt特点

  • 不可逆加密(无法解密回原文)
  • 自动加盐(同一个密码每次加密结果都不一样)
  • 安全、简单、Spring自带

2.BCrypt两个核心方法

  1. 加密:BCrypt.hashpw(明文密码,BCrypt.gensalt())
  2. 验证:BCrypt.checkpw(明文密码,加密后密码)

3.迭代一下登录代码

注册时→密码加密存储

UserController.java注册部分:

less 复制代码
@PostMapping("/register") 
public String register(@RequestBody User user) {
// 明文密码加密 
String rawPassword = user.getPassword(); 
String encodePassword = BCrypt.hashpw(rawPassword, BCrypt.gensalt());
user.setPassword(encodePassword); // 存入加密后的密码 
userService.register(user); 
return "success"; 
}

登陆时→对比验证

重点:不能用where password=?查询!必须先查用户,再比对密码!

UserController.java登录部分:

typescript 复制代码
@PostMapping("/login") 
public String login(String username, String password, HttpSession session) {
// 1. 只根据用户名查用户
User user = userService.findByUsername(username); 

if (user == null) {
return "fail"; 
} 
// 2. 使用 BCrypt 校验密码(明文 vs 密文) 
boolean ok = BCrypt.checkpw(password, user.getPassword()); 

if (ok) { 
session.setAttribute("loginUser", user);
return "success";
} else { 
return "fail";
} 
}

UserService增加方法

typescript 复制代码
public User findByUsername(String username) {
return userMapper.findByUsername(username); 
}

UserMapper增加

arduino 复制代码
User findByUsername(String username);

User Mapper.XML增加

csharp 复制代码
<select id="findByUsername" resultType="com.example.easy_add_del_change_select.pojo.User"> 
select * from user where username=#{username} 
</select>

4.最终效果

  • 数据库里密码长这样:

$2a$10$xxxxxxx...

  • 任何人都无法反查原文
  • 即使数据库泄露,密码也没用
  • 企业标准安全方案

5.总结

密码不能明文存储,必须使用 BCrypt 不可逆加密,自动加盐,每次加密结果不同,登录时通过 checkpw 方法比对,安全性极高。

相关推荐
莫得感情 o1 小时前
并发 14 · 收官:虚拟线程与结构化并发
java·并发
聚美智数1 小时前
图片水印-图片剪裁-图片缩放API接口介绍
java·服务器·数据库
xierui1231232 小时前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
cfm_29142 小时前
Spring AI Tool 调用架构全解
java·人工智能·spring
sun༒2 小时前
Spring @Scheduled 定时任务详解:Cron表达式、执行顺序、优先级与并行调度
java·后端·spring
一次旅行3 小时前
DeepSeek‑V4‑Flash‑Vision‑Exp 小白入门实战|3种传图方式、完整可跑代码、避坑排障
java·前端·人工智能
野生技术架构师3 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
java·spring boot·后端
AI人工智能+电脑小能手3 小时前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
奥莱维3 小时前
KNX酒店方案_KNX专用线与高端酒店技术逻辑
java·服务器·前端·数据库
工业一体机老司机3 小时前
Linux工业一体机自启动服务配置:systemd服务单元编写与开机优化实战
java·linux·服务器