在之前寫的日志《https://mp.csdn.net/mp_blog/creation/editor/113105977》中寫了RSA簽名,忘記寫了驗簽,現在補上該部分。
結合上述文檔,獲取到服務端返回的數據后,需要使用自己渠道的私鑰獲取到AES密碼key,然后使用key解密出返回的源數據和sign,根據源數據使用服務端的公鑰進行驗簽。
引入forge.js
因為postman自帶的加密函數是cryptoJS,不能滿足數字RSA-SHA1簽名,即JAVA里的SHA1WithRSA,因此需要接入第三方庫,這里找到forge.js。forge的GitHub地https://github.com/digitalbazaar/forge。具體使用可參考上述文章。
RSA驗簽
具體的報文拼接就不再這里詳細說明,pub_key為服務端公鑰,XXXdata為源數據。
//-----------------使用服務端公鑰進行驗簽-------//
function signpublic(pub_key,XXXdata){
//注意此處上下的BEGIN PUBLIC KEY不要刪除,框架自帶的
const prienc_key = '-----BEGIN PUBLIC KEY-----n'
+ pub_key
+ 'n-----END PUBLIC KEY-----';
var privateKey = forge.pki.publicKeyFromPem(prienc_key);
const md = forge.md.sha1.create();
md.update(XXXdata,"utf8");
let erg = forge.util.decode64(datasign);
var decrypttext = privateKey.verify(md.digest().getBytes(), erg);
return decrypttext;
};
驗簽之前需要對sign進行解碼,因為在簽名是做了base64的轉碼,驗簽函數privateKey.verify()在手冊中可以看到,具體使用可以參考手冊
https://gitee.com/fork_github/forge#rsa。