Java实现BCrypt密码加密的示例

 更新时间:2026年04月15日 08:14:45   作者:用户668859984766  
本文介绍了MySQL数据库密码安全存储的方法,使用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 方法比对,安全性极高。

到此这篇关于Java实现BCrypt密码加密的示例的文章就介绍到这了,更多相关Java BCrypt密码加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot 基于 SAML 实现单点登录原理解析

    Spring Boot 基于 SAML 实现单点登录原理解析

    基于SAML在 Spring Boot 中实现单点登录虽然有一定的复杂度,但能为企业级应用带来强大的身份验证和授权功能,本文将详细介绍在 Spring Boot中基于SAML实现单点登录的原理、方式、优缺点及注意事项,并给出具体代码示例,感兴趣的朋友一起看看吧
    2025-06-06
  • java map的key值转驼峰命名的方法

    java map的key值转驼峰命名的方法

    这篇文章主要介绍了java map的key值转驼峰,通过实例代码介绍了Map把“_”形式的key转化为驼峰形式,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Java concurrency之Condition条件_动力节点Java学院整理

    Java concurrency之Condition条件_动力节点Java学院整理

    Condition的作用是对锁进行更精确的控制。下面通过本文给大家分享Java concurrency之Condition条件的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-06-06
  • 详解Java 类的加载、连接和初始化

    详解Java 类的加载、连接和初始化

    这篇文章主要介绍了Java 类的加载、连接和初始化的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java HashMap两种简便排序方法解析

    Java HashMap两种简便排序方法解析

    这篇文章主要介绍了Java HashMap两种简便排序方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • IDEA中设置Run Dashboard方式

    IDEA中设置Run Dashboard方式

    这篇文章主要介绍了IDEA中设置Run Dashboard方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java annotation元注解原理实例解析

    Java annotation元注解原理实例解析

    这篇文章主要介绍了Java annotation元注解原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 如何在Redis中实现分页排序查询过程解析

    如何在Redis中实现分页排序查询过程解析

    这篇文章主要介绍了如何在Redis中实现分页排序查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java日常练习题,每天进步一点点(21)

    Java日常练习题,每天进步一点点(21)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Mybatis-Plus中update()和updateById()将字段更新为null

    Mybatis-Plus中update()和updateById()将字段更新为null

    本文主要介绍了Mybatis-Plus中update()和updateById()将字段更新为null,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论