SpringBoot集成jasypt

本文介绍了Jasypt库在SpringBoot项目中的应用,包括如何导入依赖、配置加密参数、实现加密和解密操作,以及如何安全处理和传递秘钥。

一. jasypt介绍

Jasypt(Java Simplified Encryption)是一个Java库,它允许开发人员以最小的努力为项目添加基本的加密功能,而无需深入了解密码学的工作原理。

  • 基于标准的高安全性加密技术,适用于单向和双向加密。加密密码,文本,数字,二进制文件...
  • 与 Hibernate 的透明集成。
  • 适合集成到基于 Spring 的应用程序中,也可以透明地与 Spring 安全性集成。
  • 用于加密应用程序(即数据源)配置的集成功能。
  • 多处理器/多核系统中高性能加密的特定功能。
  • 开放 API 以与任何 JCE 提供程序一起使用。

官网:http://www.jasypt.org/

二. SpringBoot项目中集成jasypt

  1. 基本用法

2.1 导入jar

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

2.2 修改yml配置文件

jasypt:
  encryptor:
    # 加密的秘钥
    password: haha
    # 加密算法
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator
    property:
      # 算法识别的前后缀,默认ENC(),包含在前后缀的加密信息,会使用指定算法解密
      prefix: Enc(
      suffix: )

jasypt3.0后,默认支持的算法为 PBEWITHHMACSHA512ANDAES_256 ,该算法需要JDK1.9 以上支持或者添加JCE(Java Cryptography Extension 无限强度权限策略文件)支持。本例使用PBEWithMD5AndDES算法。

2.3 生成加密后的数据

public class JasyptUtils {
    public static void main(String[] args) {
        String info = encrypt("root");
        System.out.println("加密后:" + info);
        String decrypt = decrypt(info);
        System.out.println("解密后:" + decrypt);
    }

    /**
     * 加密
     *
     * @param plaintext 明文
     * @return
     */
    public static String encrypt(String plaintext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        // 指定算法
        config.setAlgorithm("PBEWithMD5AndDES");
        // 指定秘钥,和yml配置文件中保持一致
        config.setPassword("haha");
        encryptor.setConfig(config);
        // 生成加密数据
        return encryptor.encrypt(plaintext);
    }

    /**
     * 解密
     *
     * @param data 加密后数据
     * @return
     */
    public static String decrypt(String data) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setPassword("haha");
        encryptor.setConfig(config);
        // 解密数据
        return encryptor.decrypt(data);
    }
}

执行加密算法,加密后数据如下图所示:

替换yml中数据库的密码:

  1. 秘钥处理

将加密密码以明文形式写在配置文件中并不安全,实际开发中也不推荐这样使用。我们使用idea测试时,可以进行如下设置:

如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:

#方式1:
java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥

#方式2:
java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥
### Spring Boot 集成 Jasypt 进行加密解密 #### 添加依赖项 为了在 Spring Boot集成 Jasypt,需向 `pom.xml` 文件中添加相应的 Maven 依赖: ```xml <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>{latest-version}</version> </dependency> ``` 此配置引入了用于 Spring BootJasypt 加密支持[^4]。 #### 设置加密密码 启动应用程序时通过命令行参数传递加密所需的密码。这可以通过如下方式实现: ```bash java -Djasypt.encryptor.password=your_password_here \ -jar target/your-application-name.jar ``` 上述指令指定了 `-Djasypt.encryptor.password` 参数来设置加密器使用的密码[^1]。 #### 修改配置文件中的敏感数据 对于希望保护的应用程序属性,在 `application.properties` 或者 `application.yml` 文件内定义这些值前加上 `ENC()` 前缀。例如: ```properties db.username= ENC(6dTiCQ7zVfWtHq9sRnOePw==) db.password= ENC(GZyvX8LhMk5aB3lFgK2rTQ==) ``` 当应用运行期间读取此类条目时会自动尝试对其进行解码处理[^2]。 #### 自动化配置类注册 一旦完成以上步骤并成功部署服务之后,框架将会自动生成必要的 Bean 实例以便于操作加密对象以及散列函数等功能组件;同时还会创建能够解析已编码字符串形式的环境变量占位符处理器实例等辅助设施。 #### 使用示例代码片段展示如何编写安全的服务逻辑 下面给出一段简单的 Java 方法用来获取经过加密存储后的数据库连接信息: ```java @Autowired private Environment env; public String getDbUsername() { return env.getProperty("db.username"); } ``` 在这个例子里面,调用 `env.getProperty()` 可以透明地访问到被加密过的用户名字段而无需关心底层具体的加解密细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值