在之前寫的日志《https://mp.csdn.net/mp_blog/creation/editor/113105977》中寫了RSA簽名,忘記寫了驗(yàn)簽,現(xiàn)在補(bǔ)上該部分。
結(jié)合上述文檔,獲取到服務(wù)端返回的數(shù)據(jù)后,需要使用自己渠道的私鑰獲取到AES密碼key,然后使用key解密出返回的源數(shù)據(jù)和sign,根據(jù)源數(shù)據(jù)使用服務(wù)端的公鑰進(jìn)行驗(yàn)簽。
引入forge.js
因?yàn)閜ostman自帶的加密函數(shù)是cryptoJS,不能滿足數(shù)字RSA-SHA1簽名,即JAVA里的SHA1WithRSA,因此需要接入第三方庫,這里找到forge.js。forge的GitHub地https://github.com/digitalbazaar/forge。具體使用可參考上述文章。
RSA驗(yàn)簽
具體的報(bào)文拼接就不再這里詳細(xì)說明,pub_key為服務(wù)端公鑰,XXXdata為源數(shù)據(jù)。
//-----------------使用服務(wù)端公鑰進(jìn)行驗(yàn)簽-------//
function signpublic(pub_key,XXXdata){
//注意此處上下的BEGIN PUBLIC KEY不要?jiǎng)h除,框架自帶的
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;
};
驗(yàn)簽之前需要對(duì)sign進(jìn)行解碼,因?yàn)樵诤灻亲隽薭ase64的轉(zhuǎn)碼,驗(yàn)簽函數(shù)privateKey.verify()在手冊(cè)中可以看到,具體使用可以參考手冊(cè)
https://gitee.com/fork_github/forge#rsa。
