SpringBoot使用Jasypt加密属性配置

摘要:
所以我们应该小心。接下来,我将使用Jasypt的通用加密和解密库进行加密配置。单密钥对称加密:一个带盐的密钥可以同时作为内容加密和解密的基础;非对称加密:使用公钥和私钥对内容进行加密和解密;以上两种加密方法使用起来非常简单。这里我们以SpringBoot集成的单密钥对称加密方法为例。

一、前言

一般我们在项目开发中的 yml 或者 properties 配置文件中都是明文的,如果一些敏感信息也使用明文方式配置的话,相对而言安全性就低了很多。

大家都知道配置文件中的都是一些数据库连接用户名密码、一些第三方密钥等信息。

开发和测试环境还好,但生产环境采用明文配置话将会有安全问题。

所以我们谨慎点,下面我将使用 Jasypt 通用的加解密库进行加密配置。

二、Jasypt 介绍

Jasypt 是一个优秀的加密库,支持密码、Digest认证、文本、对象加密,此外密码加密复合RFC2307标准。

它提供了单密钥对称加密和非对称加密两种脱敏方式。

  • 单密钥对称加密:一个密钥加盐,可以同时用作内容的加密和解密依据;
  • 非对称加密:使用公钥和私钥两个密钥,才可以对内容加密和解密;

以上两种加密方式使用都非常简单,这里以 SpringBoot 集成单密钥对称加密方式做示例。

三、集成 Jasypt

1)引入 maven 依赖

项目中使用 @SpringBootApplication 或 @EnableAutoConfiguration 注解,则直接引入以下依赖。

任何系统属性,环境属性,命令行参数,application.properties\yaml 属性和任何其他自定义属性源可以包含加密属性

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

2)yaml 配置

配置 Jasypt

1. 自定义前缀/后缀

前缀后缀主要为了识别该值是否需要解密,如不按照该格式配置,在加载配置项的时候 jasypt 将保持原值,不进行解密

jasypt:
  encryptor:
    property: # 自定义前缀后缀
      prefix: "^Cyan#["     # 前缀,默认 ENC(
      suffix: "]$"          # 后缀,默认 )

不配置时使用默认 ENC(XXX)

2. 配置秘钥

秘钥是个安全性要求比较高的属性,一般不建议直接放在项目内

① 明文配置(不推荐)

jasypt:
  encryptor:
    password: youpassword # 明文配置秘钥

② 环境变量参数注入

jasypt:
  encryptor:
    password: ${JASYPT_ENCRYPTOR_PASSWORD}
  • 命令行:
    JASYPT_ENCRYPTOR_PASSWORD=youpassword java -jar springboot.jar
  • IDEA:
    image

③ 参数配置 jasypt.encryptor.password

这种方法不需要在 yaml 或者 properties 文件中再配置 jasypt.encryptor.password
将传递加密密码作为命令行参数运行如下:

  • 命令行:
    java -jar -Djasypt.encryptor.password=youpassword springboot.jar
  • IDEA:
    image

3)加密/解密

加密有两种方式

1. 通过代码内调用API进行加密/解密

@Autowired
private StringEncryptor stringEncryptor;

public void test() {
    // 原值
    String str = "92664CB0533C7DE2";

    // 加密
    String ciphertext = stringEncryptor.encrypt(str);
    System.out.println("加密值::" + ciphertext); // 加密值::AgQD8VjIbtFP0xXgTYEu+eeC+ldwVqlYisCJBESKSNE=

    // 解密
    String plaintext = stringEncryptor.decrypt(ciphertext);
    System.out.println("解密值::" + plaintext); // 解密值::92664CB0533C7DE2
}

2. 通过命令生成加密值

不使用API可以通过如下命令生成;

java -cp jasypt核心jar jasypt启动类 input="待加密文本" password=秘钥 algorithm=使用的加密算法

  • jasypt-1.9.2.jar:jasypt核心jar包,命令行需要进入核心包目录才能直接调用,否则写为绝对路径
  • org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI:jasypt启动类
  • input="待加密文本"
  • password=秘钥
  • algorithm=使用的加密算法

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="92664CB0533C7DE2" password=youpassword algorithm=PBEWithMD5AndDES

image

4)测试使用

得到的密文后写到需要使用到的地方,加密后的字符串需要放到^Cyan#[]$或迷人的ENC()里面,格式如下:

spring:
  application:
    name: jasypt-demo
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动
    name: defaultDataSource                     # 数据源名称
    url: jdbc:mysql://localhost:3306/all_booking?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    username: ^Cyan#[riLm8px9CZ15Be5muiaKgQ==]$
    password: ^Cyan#[WngRig3JgY9DZ+RchEVUVA==]$

在获取配置信息时,凡是指定格式如ENC(xxx) 包裹的值全部都会进行解密处理

EncryptablePropertySourceWrapper对Spring属性管理类PropertySource做拓展,重写了getProperty(String name)方法,在获取配置时,凡是指定格式如ENC(x) 包裹的值全部解密处理。

@SpringBootTest
class JasyptDemoApplicationTests {

    @Autowired
    private DataSource dataSource;

    @Test
    void dataSourceTest() throws SQLException {
        System.err.println("Connection::" + dataSource.getConnection());
        // Connection::HikariProxyConnection@912784040 wrapping com.mysql.cj.jdbc.ConnectionImpl@1756f7cc
    }
}

免责声明:文章转载自《SpringBoot使用Jasypt加密属性配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Scss与Less区别[转]C# PowerPoint操作的基本用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

SQL Server中执行正则表达式

如果执行上述函数,将报告以下错误:SQL Server阻塞进程'syssp_可以为OACreate的访问执行以下SQL语句:USEmasterGOsp_configure'showadvancedoptions',1;戈尔配置;GOsp_配置'OleAutomationProcedures',1;戈尔配置;GOsp_配置'AdHocDistributedQu...

es6 解构赋值

functiondemo(){return{"name":"张三","age":21}}var{name,age}=demo();console.log;//结果:张三console.log;//结果:21三、定义函数参数functiondemo{console.log;console.log;console.log;}demo;四、函数参数的默认值传统的参...

mysql之排序查询

高级文章目录3:排序查询功能:1.按单个字段排序案例1:查询员工信息,要求工资从高到低排序2.为排序添加筛选条件案例1:部门编号˃=90的员工信息,按员工编号降序排序案例2:部门编号˃=90的人员信息,按输入时间排序。按表达式排序案例1:按年薪显示员工信息和年薪4按别名排序案例1按年薪升序查询员工信息5.按函数(长度)排序案例1查询员工姓名并按姓名长度减少...

说说接口封装

今天,我为同事封装了一个接口。当谈到接口封装时,有很多关于它的讨论。在很多情况下,说一个服务好,一个服务坏,实际上是在吐槽服务团队之外暴露的界面质量。无论哪种语言,抽象的封装接口都由一个函数名、几个参数和几个返回值组成。总之,参数不应该被封装……我们在内部尝试接口_Catch不会抛出异常,所有信息都将以错误代码的形式返回。就php而言,建议进行异常处理。...

H3C系列之三层交换机系统版本升级

本文中涉及的硬件和软件交换机:H3CS3600-28TP-SItftp软件:tftpd32软件升级文件:S36SI_ E-CMW310-R1702P44.zip升级文件描述如下:S36SI_ E-CMW310-R1702P44-S168.bin168-bitSSH加密应用程序S3600_ V606.btmbootrom(downloadedynetworkp...

海康、大华网络摄像机RTSP URL格式组成及参数配置

1.海康相机在IE浏览器中输入网络摄像头的IP地址,输入配置的用户名和密码,然后登录:视频:1。比特率类型:主流和子流,主流支持的分辨率相对较高;2.视频类型:如果需要音频和视频,则选择“复合流”;如果只需要视频,则选择“视频流”;3.分辨率设置不重复;4.码率类型:代码更改率!!!...