目前格式:HTML/XML
Step-by-step Debug Checklist
✅ 1. 你是否有引入依賴?
xml
複製
編輯
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
✅ 必須是 starter,不是 core。
🔥 確保 沒有重複或衝突版本(執行 mvn dependency:tree 看)。
✅ 2. 你有設置密碼?
至少以下其一必須存在,否則 Jasypt 不工作:
✅ JVM 參數
bash
複製
編輯
-Djasypt.encryptor.password=your-password
✅ 或 application.yml
yaml
複製
編輯
jasypt:
encryptor:
password: your-password
✅ 3. 密文格式正確?
yaml
複製
編輯
myapp:
secret: ENC(7iUgL7dM8XK0cFw34kavLw==)
ENC(...) 是 唯一能被 Jasypt 自動辨識 的格式
沒有 ENC(...) → 不會處理
空格、換行、缺少 ) 都會失敗
✅ 4. 有沒有自定義 Encryptor Bean?
如果你自己定義了這個:
java
複製
編輯
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
...
}
請檢查:
Bean 名稱一定要是 "jasyptStringEncryptor"
算法、password 設定要正確
如果你用的是 @ConditionalOnMissingBean,確保沒被略過
✅ 5. 你使用的 profile/resource filter 正確嗎?
application-${profile}.yml 有包含進打包過程嗎?
filtering 開啟後 ${} 會被處理,但 @xxx@ 需要 maven-resource-plugin filter 支援
✅ 6. 你的密文是否與 algorithm/password 一致?
如果你先用 algorithm = PBEWithMD5AndDES 加密
然後改成 PBEWITHSHA256AND128BITAES-CBC-BC → ❌ 解不開
✅ 建議你用 相同邏輯加密後再測試(可用 Java 或 CLI 工具產生密文)
✅ 7. 密文不是 Base64 嗎?為什麼沒有 ==?
沒有 == 不代表錯
Base64 尾端 = 只是 padding,取決於加密結果長度
重點是:解密正常就好,不要拿 == 當依據
✅ 8. 是否有排除 YAML 的 decrypt?
jasypt-spring-boot-starter 預設會處理 所有配置屬性,
包括:
.properties
.yml
@Value / @ConfigurationProperties
除非你用了特殊 profile 或類似以下排除:
yaml
複製
編輯
jasypt:
encryptor:
property:
prefix: ENC(
suffix: )
🧪 附加測試工具
如你想「線下測試」密碼是否正確,可以用以下程式加密:
java
複製
編輯
public static void main(String[] args) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("your-password");
config.setAlgorithm("PBEWithMD5AndDES");
config.setStringOutputType("base64");
encryptor.setConfig(config);
String plaintext = "my-secret";
String encrypted = encryptor.encrypt(plaintext);
System.out.println("ENC(" + encrypted + ")");
}
✅ 推薦檢查順序
有沒有 starter?
密文有沒有 ENC(...)?
密碼傳入了嗎(JVM 或 YAML)?
是否有自定義錯誤的 encryptor bean?
profile 資源是否被正確載入?
算法與密碼是否匹配?
U3RlcC1ieS1zdGVwIERlYnVnIENoZWNrbGlzdAoK4pyFIDEuIOS9oOaYr+WQpuacieW8leWFpeS+neiztO+8nwoKeG1sCgropIfoo70KCue3qOi8rwoKPGRlcGVuZGVuY3k+CgogIDxncm91cElkPmNvbS5naXRodWIudWxpc2VzYm9jY2hpbzwvZ3JvdXBJZD4KCiAgPGFydGlmYWN0SWQ+amFzeXB0LXNwcmluZy1ib290LXN0YXJ0ZXI8L2FydGlmYWN0SWQ+CgogIDx2ZXJzaW9uPjMuMC4zPC92ZXJzaW9uPgoKPC9kZXBlbmRlbmN5PgoK4pyFIOW/hemgiOaYryBzdGFydGVy77yM5LiN5pivIGNvcmXjgIIKCgoK8J+UpSDnorrkv50g5rKS5pyJ6YeN6KSH5oiW6KGd56qB54mI5pys77yI5Z+36KGMIG12biBkZXBlbmRlbmN5OnRyZWUg55yL77yJ44CCCgoKCuKchSAyLiDkvaDmnInoqK3nva7lr4bnorzvvJ8KCuiHs+WwkeS7peS4i+WFtuS4gOW/hemgiOWtmOWcqO+8jOWQpuWJhyBKYXN5cHQg5LiN5bel5L2c77yaCgoKCuKchSBKVk0g5Y+D5pW4CgpiYXNoCgropIfoo70KCue3qOi8rwoKLURqYXN5cHQuZW5jcnlwdG9yLnBhc3N3b3JkPXlvdXItcGFzc3dvcmQKCuKchSDmiJYgYXBwbGljYXRpb24ueW1sCgp5YW1sCgropIfoo70KCue3qOi8rwoKamFzeXB0OgoKICBlbmNyeXB0b3I6CgogICAgcGFzc3dvcmQ6IHlvdXItcGFzc3dvcmQKCuKchSAzLiDlr4bmlofmoLzlvI/mraPnorrvvJ8KCnlhbWwKCuikh+ijvQoK57eo6LyvCgpteWFwcDoKCiAgc2VjcmV0OiBFTkMoN2lVZ0w3ZE04WEswY0Z3MzRrYXZMdz09KQoKRU5DKC4uLikg5pivIOWUr+S4gOiDveiiqyBKYXN5cHQg6Ieq5YuV6L6o6K2YIOeahOagvOW8jwoKCgrmspLmnIkgRU5DKC4uLikg4oaSIOS4jeacg+iZleeQhgoKCgrnqbrmoLzjgIHmj5vooYzjgIHnvLrlsJEgKSDpg73mnIPlpLHmlZcKCgoK4pyFIDQuIOacieaykuacieiHquWumue+qSBFbmNyeXB0b3IgQmVhbu+8nwoK5aaC5p6c5L2g6Ieq5bex5a6a576p5LqG6YCZ5YCL77yaCgoKCmphdmEKCuikh+ijvQoK57eo6LyvCgpAQmVhbihuYW1lID0gImphc3lwdFN0cmluZ0VuY3J5cHRvciIpCgpwdWJsaWMgU3RyaW5nRW5jcnlwdG9yIHN0cmluZ0VuY3J5cHRvcigpIHsKCiAgICAuLi4KCn0KCuiri+aqouafpe+8mgoKCgpCZWFuIOWQjeeoseS4gOWumuimgeaYryAiamFzeXB0U3RyaW5nRW5jcnlwdG9yIgoKCgrnrpfms5XjgIFwYXNzd29yZCDoqK3lrpropoHmraPnoroKCgoK5aaC5p6c5L2g55So55qE5pivIEBDb25kaXRpb25hbE9uTWlzc2luZ0JlYW7vvIznorrkv53mspLooqvnlaXpgY4KCgoK4pyFIDUuIOS9oOS9v+eUqOeahCBwcm9maWxlL3Jlc291cmNlIGZpbHRlciDmraPnorrll47vvJ8KCmFwcGxpY2F0aW9uLSR7cHJvZmlsZX0ueW1sIOacieWMheWQq+mAsuaJk+WMhemBjueoi+WXju+8nwoKCgpmaWx0ZXJpbmcg6ZaL5ZWf5b6MICR7fSDmnIPooqvomZXnkIbvvIzkvYYgQHh4eEAg6ZyA6KaBIG1hdmVuLXJlc291cmNlLXBsdWdpbiBmaWx0ZXIg5pSv5o+0CgoKCuKchSA2LiDkvaDnmoTlr4bmlofmmK/lkKboiIcgYWxnb3JpdGhtL3Bhc3N3b3JkIOS4gOiHtO+8nwoK5aaC5p6c5L2g5YWI55SoIGFsZ29yaXRobSA9IFBCRVdpdGhNRDVBbmRERVMg5Yqg5a+GCgoKCueEtuW+jOaUueaIkCBQQkVXSVRIU0hBMjU2QU5EMTI4QklUQUVTLUNCQy1CQyDihpIg4p2MIOino+S4jemWiwoKCgrinIUg5bu66K2w5L2g55SoIOebuOWQjOmCj+i8r+WKoOWvhuW+jOWGjea4rOippu+8iOWPr+eUqCBKYXZhIOaIliBDTEkg5bel5YW355Si55Sf5a+G5paH77yJCgoKCuKchSA3LiDlr4bmlofkuI3mmK8gQmFzZTY0IOWXju+8n+eCuuS7gOm6vOaykuaciSA9Pe+8nwoK5rKS5pyJID09IOS4jeS7o+ihqOmMrwoKCgpCYXNlNjQg5bC+56uvID0g5Y+q5pivIHBhZGRpbmfvvIzlj5bmsbrmlrzliqDlr4bntZDmnpzplbfluqYKCgoK6YeN6bue5piv77ya6Kej5a+G5q2j5bi45bCx5aW977yM5LiN6KaB5ou/ID09IOeVtuS+neaTmgoKCgrinIUgOC4g5piv5ZCm5pyJ5o6S6ZmkIFlBTUwg55qEIGRlY3J5cHTvvJ8KCmphc3lwdC1zcHJpbmctYm9vdC1zdGFydGVyIOmgkOioreacg+iZleeQhiDmiYDmnInphY3nva7lsazmgKfvvIwKCuWMheaLrO+8mgoKCgoucHJvcGVydGllcwoKCgoueW1sCgoKCkBWYWx1ZSAvIEBDb25maWd1cmF0aW9uUHJvcGVydGllcwoKCgrpmaTpnZ7kvaDnlKjkuobnibnmroogcHJvZmlsZSDmiJbpoZ7kvLzku6XkuIvmjpLpmaTvvJoKCgoKeWFtbAoK6KSH6KO9Cgrnt6jovK8KCmphc3lwdDoKCiAgZW5jcnlwdG9yOgoKICAgIHByb3BlcnR5OgoKICAgICAgcHJlZml4OiBFTkMoCgogICAgICBzdWZmaXg6ICkKCvCfp6og6ZmE5Yqg5ris6Kmm5bel5YW3CgrlpoLkvaDmg7PjgIznt5rkuIvmuKzoqabjgI3lr4bnorzmmK/lkKbmraPnorrvvIzlj6/ku6XnlKjku6XkuIvnqIvlvI/liqDlr4bvvJoKCgoKamF2YQoK6KSH6KO9Cgrnt6jovK8KCnB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCiAgICBQb29sZWRQQkVTdHJpbmdFbmNyeXB0b3IgZW5jcnlwdG9yID0gbmV3IFBvb2xlZFBCRVN0cmluZ0VuY3J5cHRvcigpOwoKICAgIFNpbXBsZVN0cmluZ1BCRUNvbmZpZyBjb25maWcgPSBuZXcgU2ltcGxlU3RyaW5nUEJFQ29uZmlnKCk7CgogICAgY29uZmlnLnNldFBhc3N3b3JkKCJ5b3VyLXBhc3N3b3JkIik7CgogICAgY29uZmlnLnNldEFsZ29yaXRobSgiUEJFV2l0aE1ENUFuZERFUyIpOwoKICAgIGNvbmZpZy5zZXRTdHJpbmdPdXRwdXRUeXBlKCJiYXNlNjQiKTsKCiAgICBlbmNyeXB0b3Iuc2V0Q29uZmlnKGNvbmZpZyk7CgoKCiAgICBTdHJpbmcgcGxhaW50ZXh0ID0gIm15LXNlY3JldCI7CgogICAgU3RyaW5nIGVuY3J5cHRlZCA9IGVuY3J5cHRvci5lbmNyeXB0KHBsYWludGV4dCk7CgogICAgU3lzdGVtLm91dC5wcmludGxuKCJFTkMoIiArIGVuY3J5cHRlZCArICIpIik7Cgp9CgrinIUg5o6o6Jam5qqi5p+l6aCG5bqPCgrmnInmspLmnIkgc3RhcnRlcu+8nwoKCgrlr4bmlofmnInmspLmnIkgRU5DKC4uLinvvJ8KCgoK5a+G56K85YKz5YWl5LqG5ZeO77yISlZNIOaIliBZQU1M77yJ77yfCgoKCuaYr+WQpuacieiHquWumue+qemMr+iqpOeahCBlbmNyeXB0b3IgYmVhbu+8nwoKCgpwcm9maWxlIOizh+a6kOaYr+WQpuiiq+ato+eiuui8ieWFpe+8nwoKCgrnrpfms5XoiIflr4bnorzmmK/lkKbljLnphY3vvJ8K