Springboot实现ENC加密
创始人
2024-01-29 22:17:22
0

目录

  • 1. 为什么要用ENC加密
  • 2. jasypt实现ENC加密
    • 1. 实现流程
    • 2. 说明
      • 1. 自定义加密秘钥
        • 1. 盐、前缀、后缀
        • 2. 自定义加密方案
      • 2. 部署方案

1. 为什么要用ENC加密

以下是未经过加密的数据库配置,密码均是采用明文密码,很容易导致数据库泄露。

spring:datasource:dynamic:postgresql:url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghaiusername: rootpassword: admin          driver-class-name: org.postgresql.Driver ...redis:ip: www.xxxx.topport: 6379# 密码pass: admin	# 最大实例max-total: 1024# 最大空闲实例max-idle: 100# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。max-wait: 10000# 超时时间,单位毫秒。timeout: 10000

以下是经过ENC加密之后的配置,这样之后,数据库密码安全级别就高了。

spring:datasource:dynamic:postgresql:url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghaiusername: rootpassword: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)driver-class-name: org.postgresql.Driver ...redis:ip: www.xxxx.topport: 6379# 密码pass: ENC(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)	# 最大实例max-total: 1024# 最大空闲实例max-idle: 100# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。max-wait: 10000# 超时时间,单位毫秒。timeout: 10000

2. jasypt实现ENC加密

1. 实现流程

  • 导入依赖:

            com.github.ulisesbocchiojasypt-spring-boot-starter3.0.2
    
  • 测试类:

    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;/*** @Author: chenJY* @Description:* @Date: 2022-11-18 9:19*/
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class EncryptorTest {@Resourceprivate StringEncryptor jasyptStringEncryptor;@Testpublic void encode() {System.out.println( "加密密文:" + jasyptStringEncryptor.encrypt("admin") );System.out.println("解密密文:" + jasyptStringEncryptor.decrypt(jasyptStringEncryptor.encrypt("admin")));}
    }
    
  • 运行测试类:

  • 将加密密文加入到配置文件中:

    spring:datasource:dynamic:postgresql:url: jdbc:postgresql://127.0.0.1:5589/mypg?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghaiusername: rootpassword: Chen(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)chendriver-class-name: org.postgresql.Driver ...redis:ip: www.xxxx.topport: 6379# 密码pass: Chen(2qWZr4WLw8H0nPBzMXBV9WimRfKC3pv5UVGB5mMApbINg2s83VfsYvL7XTWaUR8q)chen	# 最大实例max-total: 1024# 最大空闲实例max-idle: 100# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。max-wait: 10000# 超时时间,单位毫秒。timeout: 10000
    
  • 重启springboot项目,能正常启动

2. 说明

由于springboot自动配置的特性,导入 jasypt-spring-boot 依赖包之后,不用进行过多配置,就能实现配置文件加密字段自动解密,所以特别方便。

1. 自定义加密秘钥

1. 盐、前缀、后缀

可以在配置文件中自定义一个加密秘钥(盐), 来获取明文密码。

# 加密秘钥
jasypt:encryptor:password: Chen # 加密时的salt值

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

# 加密秘钥
jasypt:encryptor:password: Chenproperty:prefix: Chen( # 前缀suffix: )chen # 后缀

2. 自定义加密方案

配置类

@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
    

    并修改测试类:

        @Autowiredprivate StringEncryptor myStringEncryptor;
    

2. 部署方案

密钥(盐值)存储说明: 本身加解密过程都是通过盐值进行处理的,所以正常情况下盐值和加密串是分开存储的。盐值应该放在系统属性、命令行或是环境变量来使用,而不是放在配置文件。

  • 程序启动 命令行参数:

    java -jar xxx.jar --jasypt.encryptor.password=Chen &
    
  • 程序启动 环境变量:

    java -jar -Djasypt.encryptor.password=Chen xxx.jar
    

相关内容

热门资讯

盘点当下最赚钱的无本创业小项目... 创业可以说是现在非常受欢迎的话题,很多人都会想要去创业,去实现自己的梦想,或者说是想改变一下自己的生...
适合小区创业的小本项目有哪些 ... 适合小区创业的小本项目有哪些?创业是每个人都想干的一件事,但是又不知到从何做起,大型的加盟项目投资费...
小区里的小本暴利项目哪些 有哪... 受到疫情影响,今年从年初开始,经济大环境就不算好。大家都在抱怨现在挣钱太难了,市场不景气,都没什么生...
千元小本创业有哪些 2018年... 经济形势的发展下,人民币逐渐贬值。对于创业者来说,想要找到1000元以下创业项目是比较困难的。因为一...
适合小本创业的五个好项目 推荐... 二胎政策开放很久了,儿童行业是具有潜力的市场,现在的家长都很疼爱自己的孩子,很注重孩子的早期教育培训...
2020年最好的创业项目是什么...   还不知道朋友看这里那今天我们就来说几个创业的好项目给大家分享:1、开宠物店,现在的年轻人压力大,...
小本创业代理好项目 小本创业代...  短视频,自媒体,达人种草一站服务最新移动电商创业项目:手机微信制作平台照片书照片书就是把您手机里的...
在四五线小城市有哪些城镇小本创... 如今的生活越来越好,每个人对美好生活的留念越来越重视了,很多人在生活中不管遇到什么样的事情,只要是值...
2019小本创业项目哪个比较好... 现在这些传统行业竞争压力大,投入成本也越来越高了。想要创业但是条件又有限,怎样才能以最小的成本去努力...
投入一千多 有必要理财吗 投入... 摘要:项目:防晒帽子、配饰作为一个赚女人钱的项目,卖防晒帽及配饰还是很不错的。有多少女性朋友,惧怕炎...