Bootstrap

【Springboot开发】SpringBoot集成Jasypt加密

引言:数据库密码等信息不能直接放在程序中,应该进行加密处理。根据网上的资料整理了用Jasypt加密的过程。

1. 添加依赖

        <!-- jasypt -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

网上大部分版本现在都是使用的3.0.3版本

2. 添加配置信息

jasypt:
  encryptor:
    # 加密的盐值,为了安全,该配置可以放在启动参数或者命令行参数中
    password: fa7bd4edd42448aea8c9484fbce6e8cd
    # 加密所采用的算法
    algorithm: PBEWITHHMACSHA512ANDAES_256

这里的password是加密算法的密钥,事实上密钥不应该直接放在文件中,后面会提到密钥的处理,这里为了方便暂时放在配置文件中。

3. 密文替换

生成密文的方式有多种,这里介绍常见的两种。

3.1 方式一(java文件加密)

import org.jasypt.encryption.StringEncryptor;
public void encrypt() {
        String url = encryptor.encrypt("jdbc:mysql://ubuntu:3306/jasypt?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC");
        String username = encryptor.encrypt("root");
        String pwd = encryptor.encrypt("password");
        System.out.println("url = " + url);
        System.out.println("username = " + username);
        System.out.println("pwd = " + pwd);}

3.2 方式二(命令行加密)

// 加密命令
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input='root' password=abcdef algorithm=PBEWithMD5AndDES

// 解密命令
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input='z4xP29fuY4wF2AJqp1NnoGJxj' password=abcdef algorithm=PBEWithMD5AndDES

通过该种方式获取密文,需要到maven仓库下jasypt-1.9.3.jar包所在的路径下执行,否则会报找不到对应的主类。

4. 替换明文

对数据库地址、用户名、密码进行加密后,打印出生成的密文,并且替换掉配置文件中的明文:

spring:
  datasource:
    url: ENC(RSSEciOYx39dlPxCWeP46RZG1wkgtuPMgaZu2XgnrPluvHcAIzIEW79K1j9WIWLVHPbBpb6t1ehiiTiQGnzR1CFvrFm16bE0koyh/8exbh1ulYkfaSdBOivNHIF6CSxPy54vmxn3LaXug6ZYxfNBymQINbRa2fsXxlHT+TgvKqs=)
    username: ENC(YkJGWv80AEpPREn3Rt2Ic6BzzO+v+3m5Uy/r33pz4ZbZbD3vhi7vJz9nwGHKg8+n)
    password: ENC(4lEHAy//ExXjJxN9WQgyqgAjSkzIJ3irTYTYG8so6HgZWxPRl6Pa8tCUK/qmXSYb)
    driver-class-name: com.mysql.cj.jdbc.Driver

ENC()是固定格式,括号里是上一步生成的密文。

5. 密钥的存储

为了避免密钥泄露,推荐两种存储方法:

  • 把秘钥当做程序启动时的命令行参数
java -jar xxx.jar --jasypt.encryptor.password=秘钥

java -jar xxx.jar 是一条命令行操作,用于在 Java 环境中运行可执行的 JAR 文件。

  • 把秘钥当做程序启动时环境变量
java  -Djasypt.encryptor.password=秘钥 -jar xxx.jar

'-Djasypt.encryptor.password=秘钥’ 是通过命令行参数 -D 来设置系统属性的方式,其中 jasypt.encryptor.password 是 Jasypt 加密器的密码属性名,而 秘钥 则是你要设置的具体密码值。

;