首页 > 其他分享 >Springboot实现ENC加密jasypt-spring-boot-starter

Springboot实现ENC加密jasypt-spring-boot-starter

时间:2023-06-01 13:36:08浏览次数:46  
标签:ENC Springboot jasypt var10002 requireNonNull encryptor org config

依赖:

<!-- 配置文件加密 -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.4</version>
        </dependency>

最新的3.0.5,我的springboot是2.6.12,对应的3.0.4版本

 

配置properties

jasypt.encryptor.password=jasyptpassword
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

对应加密的秘钥(salt盐值),和加密算法;如果是3.0.0以前的版本,可以只指定加密秘钥,有默认算法,如果是3.0.0后的版本必须提供加密算法,因为好像默认导入的有随机IvGeneratorClassname;如果只是同一个应用里面的启动实例直接加解密应该没有问题,如果使用一次实例生产的密文,通过第二次来解密就需要配置同样的秘钥,和对应的加密算法了

private StringEncryptor createPBEDefault() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        JasyptEncryptorConfigurationProperties var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setPassword((String)this.getRequired(var10002::getPassword, this.propertyPrefix + ".password"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setAlgorithm((String)this.get(var10002::getAlgorithm, this.propertyPrefix + ".algorithm", "PBEWITHHMACSHA512ANDAES_256"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setKeyObtentionIterations((String)this.get(var10002::getKeyObtentionIterations, this.propertyPrefix + ".key-obtention-iterations", "1000"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setPoolSize((String)this.get(var10002::getPoolSize, this.propertyPrefix + ".pool-size", "1"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setProviderName((String)this.get(var10002::getProviderName, this.propertyPrefix + ".provider-name", (Object)null));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setProviderClassName((String)this.get(var10002::getProviderClassName, this.propertyPrefix + ".provider-class-name", (Object)null));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setSaltGeneratorClassName((String)this.get(var10002::getSaltGeneratorClassname, this.propertyPrefix + ".salt-generator-classname", "org.jasypt.salt.RandomSaltGenerator"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setIvGeneratorClassName((String)this.get(var10002::getIvGeneratorClassname, this.propertyPrefix + ".iv-generator-classname", "org.jasypt.iv.RandomIvGenerator"));
        var10002 = this.configProps;
        Objects.requireNonNull(var10002);
        config.setStringOutputType((String)this.get(var10002::getStringOutputType, this.propertyPrefix + ".string-output-type", "base64"));
        encryptor.setConfig(config);
        return encryptor;

 

对应的测试文件

package com.imddysc.jtestpro;

import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;


@SpringBootTest
@RunWith(SpringRunner.class)
public class EncryptorTest {
    @Resource
    private StringEncryptor jasyptStringEncryptor;

    @Test
    public void encode() {
        System.out.println( "加密密文:" + jasyptStringEncryptor.encrypt("admin") );
        System.out.println("解密密文:" + jasyptStringEncryptor.decrypt(jasyptStringEncryptor.encrypt("admin")));
    }

    @Test
    public void encode1() {
        System.out.println("解密密文:" + jasyptStringEncryptor.decrypt("B6lb0KWHaelXGKul+8pyjA=="));
        System.out.println("解密密文:" + jasyptStringEncryptor.decrypt("lglDrLUV8KHF1Yvg6s8b7w=="));
    }

}

自定义加密前缀、后缀: 如果不想使用 ENC来作为加密前缀,那么可以通过配置文件修改:

# 前缀
jasypt.encryptor.property.prefix=SUPERENC(
# 后缀
jasypt.encryptor.property.suffix=)SUPERENCEND

那么,密码的格式如下:

jdbc.password=SUPERENC(B6lb0KWHaelXGKul+8pyjA==)SUPERENCEND
redis.password=SUPERENC(lglDrLUV8KHF1Yvg6s8b7w==)SUPERENCEND



自定义加密方案

配置类

@Configuration
public class MyEncryptorCfg {
    /**
     * @Description 自定义的加密器配置
     * @author chenJY
     * @date 2022/11/18 9:52
     * @return StringEncryptor
    */
    @Bean(name = "myStringEncryptor")
    public StringEncryptor myStringEncryptor() {

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("Chen");
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);

        return encryptor;
    }
}
  • 注意1: bean必须重命名,bean默认名是 jasyptStringEncryptor,当我们要自定义加密方案的时候,就必须重命名。
  • 注意2: 需要在配置文件中加入如下配置:
jasypt:
  encryptor:
    bean: myStringEncryptor

并修改测试类:

@Autowired
    private StringEncryptor myStringEncryptor;

 


另外还有个

jasypt:
  encryptor:
    algorithm: PBEWithMD5AndDES
    password: jasyptpassword
    salt-generator-classname: org.jasypt.salt.ZeroSaltGenerator
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

    salt-generator-classname,它也是一个比较重要的salt参数,有0盐还有随机盐等。


 

 

 

 

 

标签:ENC,Springboot,jasypt,var10002,requireNonNull,encryptor,org,config
From: https://blog.51cto.com/lenglingx/6393370

相关文章

  • 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!
    sslpayload取1024字节,然后使用VAE检测异常的ssl流。代码如下:fromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerimportnumpyasnpimporttensorflowastfimporttflearnfrommatplotlibimportpyplotaspltimport......
  • [SprigMVC/SpringBoot] JSON序列化专题之日期序列化问题:接口报Jackson框架错误“Inva
    0序言今日工作中遇到的一个bug。各位看官且听我娓娓道来。1问题描述请求接口时,service层返回到controller层的数据结构为List<Map<Strig,Object>>,而Map中存在一个key=date,valuetype=java.time.LocalDate的Entry,且日志报如下错误:InvalidDefinitionException:Java8date......
  • SpringBoot集成Redis
    依赖包:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><grou......
  • m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
    1.算法仿真效果vivado2019.2仿真结果如下:其中1为直接乘法公式计算;2为移位法计算;3为分布式计算;2.算法涉及理论知识概要人类获得信息的主要方式是视觉,通常情况下颜色有2种描述方式,一种是RGB色度空间表示,一种是YCbCr色度空间表示。然而,普通的RGB颜色空间对视频的显示存在......
  • m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
    1.算法仿真效果vivado2019.2仿真结果如下: 其中1为直接乘法公式计算; 2为移位法计算; 3为分布式计算; 2.算法涉及理论知识概要        人类获得信息的主要方式是视觉,通常情况下颜色有2种描述方式,一种是RGB色度空间表示,一种是YCbCr色度空间表示。然而,普通......
  • Flutter导入第三方包后报错The number of method references in a .dex file cannot e
    报错导入just_audio:^0.9.34后编译报错。报错内容如下:ERROR:D8:Cannotfitrequestedclassesinasingledexfile(#methods:71340>65536)com.android.builder.dexing.DexArchiveMergerException:Errorwhilemergingdexarchives:Thenumberofmethodreference......
  • springboot整合log4j解决依赖冲突
    首先将web模块的日志排除<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion>......
  • SpringBoot的基础
    1、获取配置文件的值:@Value的方式yml配置文件redis:host:199.22.22.341.1、用法1:普通用法@Value("${redis.host}")privateStringparamName;结果1.2、用法2:冒号(:)的作用冒号(:)的作用:当获取的值没有值时,返回冒号后的预设值默认值@Value("${redis......
  • SpringBoot 多环境部署
    多个配置文件application.yamlapplication-dev.yamlapplication-test.yamlapplication-prod.yaml加载顺序默认加载application.yamlprofiles.active==dev合配置使用不同配置application.yaml中profiles.active:devnohupjava-Duser.timezone=Asia/Shanghai-j......
  • SpringBoot整合OSS文件上传
    一、注册阿里云账号并开通OSS服务1、登录阿里云账号2、创建一个bucket3、创建子用户对自用户分配权限,打开操作OSS的全部权限(也可根据业务需求进行更改)4、配置上传跨域规则任何来源:*允许方法:POST任何请求头Headers:*二、文件上传方式1、服务器直传方式每个O......