iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >加密算法---BCryptPasswordEncoder的使用及原理
  • 401
分享到

加密算法---BCryptPasswordEncoder的使用及原理

java 2023-08-16 18:08:04 401人浏览 独家记忆
摘要

BCryptPassWordEncoder的使用及原理 一 介绍二 案例使用2.1 添加依赖2.2 PasswordConfig2.3 application.yml2.4 单元测试2.5 结果 三 优秀博客 一 介绍

一 介绍

spring security中的BCryptPasswordEncoder方法采用SHA-256 +随机盐+密钥对密码进行加密。SHA系列是Hash算法,不是加密算法,使用加密算法意味着可以解密(这个与编码/解码一样),但是采用Hash处理,其过程是不可逆的。
(不可逆加密SHA:
基本原理:加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,无法根据密文推算出明文。
RSA算法历史:底层-欧拉函数)

1)加密(encode):注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进行hash处理,得到密码的hash值,然后将其存入数据库中。

2)密码匹配(matches):用户登录时,密码匹配阶段并没有进行密码解密(因为密码经过Hash处理,是不可逆的),而是使用相同的算法把用户输入的密码进行hash处理,得到密码的hash值,然后将其与从数据库中查询到的密码hash值进行比较。如果两者相同,说明用户输入的密码正确。

二 案例使用

2.1 添加依赖

                  org.springframework.security            spring-security-core             5.7.6        

2.2 PasswordConfig

为了防止有人能根据密文推测出salt,我们需要在使用BCryptPasswordEncoder时配置随即密钥,创建一个PasswordConfig配置类,注册BCryptPasswordEncoder对象:

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;import java.security.SecureRandom;@Data@Configuration@ConfigurationProperties(prefix = "encoder.crypt")public class PasswordConfig {        private int strength;        private String secret;    @Bean    public BCryptPasswordEncoder passwordEncoder() {        //System.out.println("secret = " + secret);        //对干扰因子加密        SecureRandom secureRandom = new SecureRandom(secret.getBytes());        //对密码加密        return new BCryptPasswordEncoder(strength, secureRandom);    }}

2.3 application.yml

encoder:  crypt:    secret: ${random.uuid} # 随机的密钥,使用uuid    strength: 6 # 加密强度4~31,决定盐加密时的运算强度,超过10以后加密耗时会显著增加

2.4 单元测试

import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;@SpringBootTestclass ApplicationTests {    final static private String password = "123456";    @Autowired    private BCryptPasswordEncoder encoder;    @Test    void savePassword() {        // encode():对明文字符串进行加密        //注册用户时,使用SHA-256+随机盐+密钥把用户输入的密码进行hash处理,得到密码的hash值,然后将其存入数据库中。        String encode1 = encoder.encode(password);        System.out.println("encode1:" + encode1);        String encode2 = encoder.encode(password);        System.out.println("encode2:" + encode2);        // matches():对加密前和加密后是否匹配进行验证        //用户登录时,密码匹配阶段并没有进行密码解密(因为密码经过Hash处理,是不可逆的),        // 而是使用相同的算法把用户输入的密码进行hash处理,得到密码的hash值,然后将其与从数据库中查询到的密码hash值进行比较。        // 如果两者相同,说明用户输入的密码正确。        boolean matches1 = encoder.matches(password, encode1);        System.out.println("matches1:" + matches1);        boolean matches2 = encoder.matches(password, encode2);        System.out.println("matches2:" + matches2);    }}

2.5 结果

在这里插入图片描述
2.6 项目源码
项目源码

三 优秀博客

SpringSecurity中的BCryptPasswordEncoder算法
SpringSecurity中的密码加密算法:BCryptPasswordEncoder
BCryptPasswordEncoder使用

来源地址:https://blog.csdn.net/weixin_43811057/article/details/128942965

--结束END--

本文标题: 加密算法---BCryptPasswordEncoder的使用及原理

本文链接: https://www.lsjlt.com/news/371849.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 加密算法---BCryptPasswordEncoder的使用及原理
    BCryptPasswordEncoder的使用及原理 一 介绍二 案例使用2.1 添加依赖2.2 PasswordConfig2.3 application.yml2.4 单元测试2.5 结果 三 优秀博客 一 介绍...
    99+
    2023-08-16
    java
  • RC4加密关键变量及算法特点原理详解
    目录什么是RC4RC4算法特点RC4加密的几个关键变量RC4加密原理什么是RC4 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变...
    99+
    2022-11-13
  • Base64加密的原理及PHP中的实现方法
    Base64是一种将二进制数据编码成ASCII字符的编码方式,它可以将任何内容(例如图片、文件)转换为可读的字符串。Base64广泛应用于电子邮件、网页、App等领域,也是PHP中常见的加密方式之一。本文将介绍Base64加密的原理及PHP...
    99+
    2023-05-14
  • 详解DES加密算法的原理与Java实现
    目录DES加密算法DES加密原理DES 加密算法Java实现前面阿粉说了关于 MD5 加密算法,还有 RSA 加密算法的实现,以及他们的前世今生,今天阿粉在来说一下这个关于 DES ...
    99+
    2022-11-13
    Java DES加密算法 Java DES加密 Java DES
  • 详解RSA加密算法的原理与Java实现
    目录对称加密和非对称加密RSA加密是什么RSA的加密过程前几天阿粉刚刚说了这个 MD5 加密的前世今生,因为 MD5 也确实用的人不是很多了,阿粉就不再继续的一一赘述了,今天阿粉想给...
    99+
    2022-11-13
    Java RSA加密算法 Java RSA加密 Java RSA
  • Imail密码加密算法及VBS的实现方法
    本篇内容主要讲解“Imail密码加密算法及VBS的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Imail密码加密算法及VBS的实现方法”吧!Imail的所有邮局信息,比如用户,密码都实...
    99+
    2023-06-08
  • Go中使用加密算法的方法
    目录哈希算法加密模式对称加密⾮对称加密椭圆曲线加密算法ECC数字签名字符编码/解码巨人的肩膀哈希算法  md5 128bit,16字节 如:md5 (“he...
    99+
    2022-11-12
  • 使用 Java Bouncy Castle实现国密算法SM4、SM3以及SM2的加密
    国密算法的实现借助了Java库函数 Bouncy Castle,加密库安装使用教程请参考链接 SM4 简介 SM4,又称为商密算法,是一种分组密码算法,于2012年由中国密码技术研究中心(中国密码学会成员)发布,目前已成为我国国家密码算法,...
    99+
    2023-08-18
    java 开发语言
  • 贪心算法原理及在Java中的使用
    目录贪心算法 区间调度问题 好了,说了这么多,那针对该问题正确的贪心策略到底是哪个?应用 总结 贪心算法 由于贪心算法本身的特殊性,我们在使用贪心算法之前必须要进行证明,保证算法满...
    99+
    2022-11-12
  • 浅析Java中对称与非对称加密算法原理与使用
    目录1. 加密概念2. 对称加密3. 非对称加密4. 常见加密算法比较4.1. 散列算法比较4.2. 对称加密算法比较4.3. 非对称加密算法比较5. 常见加密算法使用5.1. MD...
    99+
    2023-03-21
    Java对称加密 Java非对称加密 Java加密
  • python加密解密算法怎么使用
    Python提供了多种加密解密算法的库,比如`hashlib`、`hmac`、`base64`、`cryptography`等。下面...
    99+
    2023-09-17
    python
  • ssl使用什么加密算法
    ssl使用的加密算法是对称加密算法,如:DES:数据加密标准,速度较快,适用于加密大量数据的场合。RSA:它是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。AES:高级加密标准,是下一代的加密算法标准,速度快,安全级别高...
    99+
    2022-10-14
  • Java中对称与非对称加密算法原理与使用方法是什么
    本篇内容介绍了“Java中对称与非对称加密算法原理与使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 加密概念密码学是研究编...
    99+
    2023-07-05
  • cdn加速原理及使用方法是什么
    CDN加速原理是将网站的静态资源(如图片、视频、CSS、JS等)缓存到全球分布的CDN节点上,当用户访问网站时,CDN节点会根据用户...
    99+
    2023-05-15
    cdn加速原理 cdn
  • C#中如何使用加密算法
    C#中如何使用加密算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#加密算法MD5的全称是message-digest algorithm 5(信息-摘要算法),在90...
    99+
    2023-06-17
  • MessageDigest的功能及用法(加密解密)
    MessageDigest是Java中提供的一个用于进行信息摘要(hash)计算的类。它主要用于保护数据的完整性和验证数据的一致性。...
    99+
    2023-09-01
    功能
  • Vue中使用crypto-jsAES对称加密算法实现加密解密
    目录 下载crypto-js加密解密数据AES算法的ECB模式加密-设置秘钥AES算法的CBC模式加密-设置秘钥和偏移量参考: 在数字加密算法中,通过可划分为对称...
    99+
    2022-11-13
  • C# 使用SHA1算法对密码进行加密
    C#中如何使用SHA1对密码进行加密呢?先声明一下,对于编程小编在这个方面还是个小白,如果小编有说的不对的地方,请各位大佬联系小编,小编好进行修改。好了不说废话了上图。在这里呢小编创...
    99+
    2022-11-11
  • 怎么使用python中的pycrypto算法加密
    今天小编给大家分享一下怎么使用python中的pycrypto算法加密的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、安装...
    99+
    2023-06-30
  • vue项目使用md5加密、crypto-js加密、国密sm3及国密sm4的方法
    目录方法一:md5加密方法二:crypto-js 加密解密方法三:国密sm3方法四:国密sm4写在后面:项目中涉及到一些加密解密的需求,了解并尝试了几种加密解密方法,以下: 方法一:...
    99+
    2022-12-08
    vue中md5加密 vue使用crypto-js加密 vue 国密sm3
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作