SCryptPasswordEncoder 单向加密 --- 心得

1.前言

* BCryptPasswordEncoder相关知识:
* 用户表的密码通常使用MD5等不可逆算法加密后存储,为防止彩虹表破解更会先使用一个特定的字符串(如域名)加密,然后再使用一个随机的salt(盐值)加密。
* 特定字符串是程序代码中固定的,salt是每个密码单独随机,一般给用户表加一个字段单独存储,比较麻烦。
* BCrypt算法将salt随机并混入最终加密后的密码,验证时也无需单独提供之前的salt,从而无需单独处理salt问题。
*
与他类似的 加密方法还有 SCryptPasswordEncoder 等

出现问题  :  报错  java.lang.NoClassDefFoundError: org/bouncycastle/crypto/generators/SCrypt

 

2.解决

需要导入依赖包即可

        <!-- SCryptPasswordEncoder 加密需要使用-->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.64</version>
        </dependency>

3.加密测试【因为是单向加密,故无法解密,只能使用内置的方法比较】

复制代码
import org.junit.Test;

import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;

public class t {
    @Test
    public void t2(){
    //加密
    String s = (new SCryptPasswordEncoder()).encode("11");
    System.out.println(s);
    //字符长度
    System.out.println(s.length());
    //解密
    if ((new SCryptPasswordEncoder()).matches("11",s)){
     System.out.println("密码一样");
    }else {
     System.out.println("密码不一样");
    }
 } }
复制代码

运行结果 ,【 长度140】

 

4.其他

其他类似 SCryptPasswordEncoder 的加密方式还有 

  • BCryptPasswordEncoder【一样的用法 ,长度60,推荐使用】
  • Pbkdf2PasswordEncoder 【一样的用法 ,长度80】
  • StandardPasswordEncoder 【一样的用法 ,长度80,这个已被淘汰,但是还能用,不建议使用】

分别需要的包

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
import org.springframework.security.crypto.password.StandardPasswordEncoder;

 

posted @   岑惜  阅读(1483)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示