Jasypt 加密配置的正确打开方式

zjc 于 2026-08-12 发布

数据库密码、SMTP 授权码这类配置,明文放在仓库里迟早会变成事故。项目使用 Jasypt 把敏感值加密成 ENC(xxx),启动时再通过环境变量或 JVM 参数注入密钥。

一、加密配置

公共配置使用同一组参数:

jasypt:
  encryptor:
    algorithm: PBEWithHMACSHA512AndAES_256
    key-obtention-iterations: 100000
    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    string-output-type: base64

https://github.com/springvortex/spring-cloud-alibaba/blob/main/service-provider/src/main/resources/config/application-jasypt.yaml

显式写出算法、迭代次数、随机盐和随机 IV,可以避免依赖隐式默认值,也方便加密工具和运行时保持一致。

二、加密工具不引入新系统

service-common 里的 JasyptTest 提供交互式工具。运行前先传入密钥:

java -Djasypt.encryptor.password=your-secret-key ...

https://github.com/springvortex/spring-cloud-alibaba/blob/main/service-common/src/test/java/com/zjc/common/JasyptTest.java

也可以使用环境变量:

JASYPT_ENCRYPTOR_PASSWORD=your-secret-key

https://github.com/springvortex/spring-cloud-alibaba/blob/main/service-common/src/test/java/com/zjc/common/JasyptTest.java

工具会输出密文并回读解密验证,确认一致后再复制到配置里。

三、密钥才是真正的秘密

配置文件里可以有密文,但不能有密钥。密钥一旦提交,ENC(xxx) 只是把明文换了一种形状。更稳妥的做法是:

  1. 密钥只存在于部署环境或密钥管理系统。
  2. 不同环境使用不同密钥。
  3. 密钥泄露时重新加密所有敏感配置。

四、随机盐带来的现象

同一个明文每次加密出的密文都不同,这是正常的,也是安全的。排查启动失败时不要对比密文,应该确认密钥是否正确、算法配置是否一致。

五、经验总结

Jasypt 能降低仓库泄露带来的直接影响,但它不是访问控制。数据库仍要限制来源 IP,SMTP 授权码仍要支持独立撤销和更换。