密码加密技术—BCrypt

一 什么是BCrypt

BCrypt是一种跨平台的文件加密工具,使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。它是一种可生成随机盐值的单向Hash加密算法,Hash值中包含了上一步生成的盐值(22个字符)的不可逆加密算法。同一种明文,每次被加密后的密文都不一样,并且不可反向破解生成明文,破解难度非常大。

BCrypt加密后的密文结构如下图所示:

其中密文结构为:$是分割符, 2y是BCrypt加密版本号,10是cost的值,紧随其后的前22位是盐值(salt),最后的字符串就是密码的密文了。

二 BCrypt能干什么

BCrypt也是一种单向Hash加密算法,因此它不可被反向破解生成明文。由于计算中使用了随机盐值,并且在密文中包含了salt值,默认情况下每次生成的密文都是不同的。随机密文带来的好处是:避免了如果两个人或多个人的密码相同,密码加密后保存到数据库会得到相同的结果,以防破解一个就可以知道其他人的密码。

三 怎么使用BCrypt

1.pom 文件引入坐标:
<!--密码加密和校验工具包-->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-crypto</artifactId>
</dependency>
2.配置密码加密匹配bean:
@Configuration
public class CommonConfig {
    /**
     * 密码加密器
     * BCryptPasswordEncoder方法采用SHA-256对密码进行加密
     * @return
     */
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}
3.密码加密测试:
@SpringBootTest
public class TestAll {
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Test
    public void testPwd(){
        String pwd="1234";
        //加密  $2a$10$WAWV.QEykot8sHQi6FqqDOAnevkluOZJqZJ5YPxSnVVWqvuhx88Ha
        String encode = passwordEncoder.encode(pwd);
        System.out.println(encode);
        /*
            matches()匹配明文密码和加密后密码是否匹配,如果匹配,返回true,否则false
            just test
         */
        boolean flag = passwordEncoder.matches(pwd,"$2a$10$WAWV.QEykot8sHQi6FqqDOAnevkluOZJqZJ5YPxSnVVWqvuhx88Ha");
        System.out.println(flag);
    }
}
### Bcrypt 加密与验证机制 Bcrypt 是一种基于 Blowfish 对称加密算法改进而来的哈希函数,专门用于存储密码的安全处理[^1]。作为一种单向散列函数,bcrypt 的设计目标是在计算上耗费更多资源来抵御暴力破解攻击。 #### 密码加密过程 在实际应用中,通常会通过编程语言提供的库函数实现 bcrypt 散列操作: 对于 Java 和 Go 这样的主流开发环境而言,都有成熟的第三方库支持 bcrypt 操作[^2]。以下是 Python 中使用 `bcrypt` 库的一个简单例子: ```python import bcrypt # 定义待加密字符串 password = b"my_secret_password" # 生成带盐值的 hash 值 hashed = bcrypt.hashpw(password, bcrypt.gensalt()) print(hashed.decode()) # 输出形如 $2b$12$qweqwe... ``` 这段代码展示了如何利用随机生成的 salt 来增强安全性,并最终得到长度固定为60字符的结果串作为存储形式。 #### 密码验证流程 由于 bcrypt 属于不可逆变换,因此不存在传统意义上的“解密”。相反,在登录认证环节应当采用如下方式完成匹配检验: ```python # 输入用户提交的新密码尝试 input_password = b"user_inputted_password" # 使用之前保存下来的 hashed 进行对比 if bcrypt.checkpw(input_password, stored_hashed): print("Password matches!") else: print("Invalid password.") ``` 这里的关键在于调用 `checkpw()` 函数而不是试图还原原始明文;该函数内部自动完成了相同参数下的重算并比较两个 hash 是否一致的过程[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值