当前位置: 首页 > news >正文

BCrypt密码加密

1.作用

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

BCrypt特点

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

2.BCrypt两个核心方法

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

3.迭代一下登录代码

注册时→密码加密存储

UserController.java注册部分:

@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登录部分:

@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增加方法

public User findByUsername(String username) { return userMapper.findByUsername(username); }

UserMapper增加

User findByUsername(String username);

User Mapper.XML增加

<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 方法比对,安全性极高。

http://www.jsqmd.com/news/647758/

相关文章:

  • 某上市炼化企业人才培养及引进成功案例纪实
  • 如果你很懒,那这种一定很适合你:CSGO游戏搬砖,不需要玩游戏就能赚钱
  • 多模态游戏AI不是升级,是重定义:2026奇点大会发布的《实时语义-物理耦合引擎》标准草案(全球首次公开)
  • 2026年智己品牌深度解析:从股东背景与品牌档次看高端新能源格局。 - 品牌推荐
  • 2026年4月中国 GEO 优化服务商 TOP5:AI 时代全域增长标杆服务商
  • Python 自动化办公:批量提取 Excel 表格中的特定数据
  • 【技术应用】邻近标记技术HaloMap“照亮”细胞内部:揭示应激颗粒的奥秘
  • 基于Python的网购平台管理系统毕业设计
  • 2026年3月 GESP CCF编程能力等级认证图形化编程一级真题
  • 2025-2026年国内别墅装修公司推荐:五大口碑服务评测对比领先历史建筑改造结构安全案例 - 品牌推荐
  • DSAnimStudio新手入门指南:从零开始掌握游戏动画编辑
  • AI写脚本:告别重复造轮子的高效编程
  • C#怎么操作WPF样式和模板 C#如何用WPF Style和ControlTemplate自定义控件外观【控件】
  • C2000学习笔记7——SPWM生成及触发ADC
  • Linux CFS 的 nr_switches:上下文切换次数统计
  • 如何构建高效跨平台远程桌面系统:BilldDesk Pro技术架构深度解析
  • 乐高与众球星共同庆祝足球的魅力
  • 告别玄学调试:用J-Flash给STM32芯片“洗个澡”,解决RT-Thread Studio下载疑难杂症
  • 2025-2026年国内别墅装修公司推荐:五大口碑服务评测对比领先全屋智能集成布线困扰 - 品牌推荐
  • 2025-2026年访客机品牌推荐:五大口碑产品评测评价顶尖访客信息登记混乱案例 - 品牌推荐
  • 2026年智己品牌深度解析:从股东背景与品牌档次看高端新能源格局 - 品牌推荐
  • 【Hermes系列7】我把 Hermes 接入了 Jenkins:回归测试从 3 天到 30 分钟
  • 如何用组合继承模式实现父类方法复用与子类属性独立
  • java util stream中的reduce
  • 大模型发展史
  • 2025-2026年国内云南旅行社推荐:五大口碑服务评测对比顶尖公司团建定制需求匹配 - 品牌推荐
  • 2025-2026年别墅装修公司评测:五大口碑服务推荐评价领先历史建筑改造结构安全 - 品牌推荐
  • 机器学习工程师日常:挑战解决日记
  • c++怎么在读取文件时自动跳过所有UTF-8编码的非法字节【进阶】
  • MediaPipe Pose从安装到使用:33个关键点检测,新手完整教程