解決shell腳本調用jasypt時的Password is not ASCII錯誤


問題場景:使用shell腳本調用jasypt.jar的對一個已加密字串進行解碼時報出java.security.spec.InvalidKeySpecException: Password is not ASCII錯誤。其中加密字串和加密秘鑰都是從yaml文件中解析的。以下內容描述了錯誤處理過程

問題范圍縮小

在shell中調用jasypt解密的腳本如下:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="9kQtb2W8i2VmFZIjLt0jPYfjWZLZpPtl" password=shen algorithm=PBEWithMD5AndDES

因為從yaml文件中獲取了inputpassword后面所用的變量,並且報錯也指明是Password出錯,所以使用固定值替換password后面的值,結果加密字串得到正常解密。這樣就確定了出錯就在password的變量。

使用od命令查看輸入變量的值

在shell腳本中使用echo ${your_variable} | od -c查看內容中是否有不可見的異常字符。

echo ${your_variable} | od -c
0000000        s    h    e    n    \r     \n
0000007

結果發現變量結束除了有正常的換行符\n外,還有回車符\r。原因是這個yaml文件是其它組在Windows上編寫的,其分行都是使用了\r\n的方式,我們在使用shell解析時沒有考慮到這種情況。

最后,使用以下方式解決此問題。

your_variable_new=$(echo ${your_variable} | tr -d '\r')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM