最近使用node對接一家支付三方,對方使用的是java
要求使用RSA加密 使用的算法是 md5WithRSA encoding是utf8 輸出是base64
在使用crypto-js和node-rsa無果后 查閱了node官方文檔的crypto找到了答案
createSign方法傳入加密算法創建一個sign對象,當然算法不是全部都支持的
使用getHashes()方法可以查到能使用的算法 正好 我們需要的md5WithRSA 在其中 (在這是md5WithRSAEncryption)
加密
try { let priKeyName = 'pri.pem'; let priKey = fs.readFileSync(path.resolve(__dirname, path.join(SELF_ROOT_PATH, 'keys/' + priKeyName))).toString(); let sign = crypto.createSign('md5WithRSAEncryption'); sign.update(signString, 'utf8'); sign.end(); let signature = sign.sign(priKey, 'base64'); } catch (err) { console.log('RSA加密 -------------------------'); console.log(err); }
驗簽
try { let pubKeyName = 'pri.pem'; let pubKey = fs.readFileSync(path.resolve(__dirname, path.join(think.ROOT_PATH, 'keys/' + pubKeyName))).toString(); let verify = crypto.createVerify('md5WithRSAEncryption'); verify.update(signString, 'utf8'); verify.end(); let res = verify.verify(pubKey, signature, 'base64'); console.log(res) } catch (err) { console.log('RSA加密 -------------------------'); console.log(err); }