springboot开发技巧-jasypt加解密实践

沉吟久,怕君恩未许,此意徘徊。

1 前言

在分布式开发中,如何确保敏感信息的安全性已成为重中之重,特别是在配置文件中,数据库连接信息、API 密钥等都是潜在的泄露风险。为了解决这些问题,Jasypt(Java Simplified Encryption)为开发者提供了一种简单且安全的加密和解密解决方案。

前段时间在做项目重构,在整理项目的配置文件时遇到了一个问题,数据库连接的账户密码都被加密了。采用的是 jasypt 加解密,之前还没有实践过这样的 ENC(xxxx)的方式,了解和实践了一番之后,有了一些心得和经验,在这里给大家做一个分享。

2 项目准备

在使用 jasypt之前,首先需要在 pom 文件中引入相关的依赖,jasypt-spring-boot-starter 是为了在项目启动时解密密文内容,jasypt-maven-plugin 是为了使用 maven 在命令行中执行加密和解密,当然这些操作可以在 java 代码中实现。

xml 复制代码
<!--  jasypt 加解密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>
<!--  jasypt 编译插件  jasypt.encryptor.password=test  -->
<plugin>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-maven-plugin</artifactId>
    <version>3.0.5</version>
</plugin>

3 jasypt 介绍

Jasypt 默认使用的算法是 PBEWithMD5AndDES, 其加密密钥是解密敏感信息的关键,需要确保密钥的安全存放。推荐使用环境变量、密钥管理服务或安全的配置中心来存储密钥,而非硬编码在项目中。

在使用Jasypt时,需要先使用代码或者命令行的模式,加密密码或者敏感信息等内容。通常情况下使用 BasicTextEncryptor 来进行加密或者解密内容,如下图所示:

java 复制代码
// 配置加密所需的密码
BasicTextEncryptor  textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword("password");
// 解密密文
String decryptedText = textEncryptor.decrypt("密文");
// 加密内容
String decryptedText = textEncryptor.encrypt("待加密明文");

如果对默认的加密方式或者算法有异议,可以采用PooledPBEStringEncryptor的方式来生成 StringEncryptor,可以自定义加密的密码,加密算法以及密钥的迭代次数。

java 复制代码
@Bean
public StringEncryptor stringEncryptor() {
    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    SimpleStringPBEConfig config = new SimpleStringPBEConfig();
    // 配置加密密钥,务必保密
    config.setPassword("passowrd");
    // 设置加密算法
    config.setAlgorithm("PBEWithMD5AndDES");
    // 设置密钥迭代次数,影响破解难度
    config.setKeyObtentionIterations("10");
    // 设置加密池的大小,1 表示单个实例使用
    config.setPoolSize("1");
    // 盐生成器类,防止彩虹表攻击
    config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
    // 设置输出编码类型为 base64
    config.setStringOutputType("base64");
    encryptor.setConfig(config);
    return encryptor;
}

4 jasypt 实践

首先需要在命令行中执行命令,生成密文或者解密明文,命令如下所示:

ini 复制代码
# jasypt:encrypt-value 加密密文 
# jasypt.encryptor.password 是加密需要的密码
# jasypt.plugin.value 是需要加密的密文
mvn jasypt:encrypt-value -Djasypt.encryptor.password="123456" -Djasypt.plugin.value="root123456!"
# 使用 jasypt:decrypt-value 解密密文
mvn jasypt:decrypt-value -Djasypt.encryptor.password="123456" -Djasypt.plugin.value="密文"

同样的,也可以使用 BasicTextEncryptor 的方式在 java 代码中实现内容的加密或者解密。

在启动项目时,需要指定解密的密码。有两种方式,其一是在执行启动命令时指定密码,其二是项目配置文件中配置解密密码,如下所示:

java 复制代码
# 启动项目时指定密码
java -Djasypt.encryptor.password=passowrd -jar myapp.jar
# 在项目中配置解密密码 
jasypt.encryptor.password=passowrd

5 总结

在本文中,主要通过项目实践介绍了 jasypt 的使用方式,通过这种加解密工具,可以使得项目中的某些敏感信息进行加密,防止信息的泄露。之前在文章中介绍了 apollo 作为配置中心的内容,如果条件允许可以使用 apollo 的加密解密功能,可以实现同样的目的。

相关推荐
楚兴1 小时前
MacBook M1 安装 OpenClaw 完整指南
人工智能·后端
JavaGuide1 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
Java编程爱好者1 小时前
2026版Java面试八股文总结(春招+秋招+社招),建议收藏。
后端
朱昆鹏2 小时前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
REDcker2 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc
figo10tf2 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva2 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
程序员敲代码吗2 小时前
Spring Boot与Tomcat整合的内部机制与优化
spring boot·后端·tomcat
NuageL2 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json