背景
對接支付通道過程中,使用RSA秘鑰對參數進行加密時,經常會遇到類似"algid parse error, not a seque"的錯誤,本篇文章主要記錄該問題的解決方案
分析
原因
與PHP或者其他語言對接過程中,開發人員得到的秘鑰可能是PKCS1格式的秘鑰,由於Java語言不支持PKCS1格式的秘鑰,導致加密失敗
方案
1.找對應的項目管理人員重新獲取PKCS8格式的秘鑰
2.或者使用openssl 工具,將PKCS1格式的秘鑰轉換為PKCS8格式的秘鑰
命令如下:
openssl pkcs8 -topk8 -inform PEM -in PKCS1-ALF.txt -outform PEM -out PKCS8-ALF.txt -nocrypt
注意
1.通常linux系統都裝有openssl環境,可以直接使用該命令
2.PKCS1-ALF.txt 是獲取到的PKCS1格式的秘鑰,PKCS8-ALF.txt是轉換而來的PKCS8格式的秘鑰
3.在轉換時,需要添加如下頭部和尾部,否則會報錯 PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: ANY PRIVATE KEY
4.注意在Java代碼中,使用秘鑰時,則要去掉如下頭部和尾部
-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
