换了新的 jasypt.encryptor.password 后服务起不来,报 Encryptor exception: Failed to decrypt property datasource.password,日志里打出 ENC(3q2+7w...) 原文。老密钥还能用,新密钥解不了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \
  input='newpass' password='new-key' algorithm=PBEWithMD5AndDES
# 用新密文替换 application.yml 里的 ENC(...)

更换密钥时没有用旧密钥解密再用新密钥重新加密,库里的密文还是旧密钥产的。启动时用新密钥直接解,AES 校验不过就抛异常。这一点先确认清楚,后面就不用反复试。

「配置解密失败」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

具体做法是,保留旧密钥先启动 用工具重新加密所有 ENC 值;新老密钥并存一段时间 支持按前缀区分;确认所有实例都能解密后再撤掉旧密钥。

改完照着核一遍,服务用新密钥正常启动,日志里不再出现 Failed to decrypt,数据源连接测试通过。

作者 9823189