接口返回的数据也是加密的,需要对数据解密才能看到返回的数据是否正确,就需要用RSA解密。
返回数据的解析可以在postman的Tests进行后置处理,获取加密后的返回数据:
var data = JSON.parse(responseBody); var enc = data.data; var encdata = enc.encdata; var enckey = enc.enckey; |
下面就对密文进行解密:
解密函数priencrypt(),需要把私钥和密文传递给它;
forge.pki.privateKeyFromPem(prienc_key)转换pem格式的公钥;
forge.util.decode64(密文)转码;
privateKey.decrypt()解密函数,把密文按照'RSAES-PKCS1-V1_5'填充方式解密成明文。
最后就得到了明文key,然后再使用key对返回的参数密文进行AES解密。
//--------RSA使用渠道私钥对密文(AES密码)进行解密-------------// function priencrypt(pri_key,encdataText){ console.info('priencrypt_key:'+pri_key); //注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的 const prienc_key = '-----BEGIN PRIVATE KEY-----\n' + pri_key + '\n-----END PRIVATE KEY-----'; var privateKey = forge.pki.privateKeyFromPem(prienc_key); var decryptedText = privateKey.decrypt(forge.util.decode64(encdataText), 'RSAES-PKCS1-V1_5', { md: forge.md.sha1.create(), mgf1: { md: forge.md.sha1.create() } }); console.info('pulencryptedText: '+ decryptedText); return decryptedText; } // 第一次运行时从网络加载forgeJS,会导致请求失败 if(!pm.globals.has('forgeJS')){ console.log('request forge.js from ' + forge_url); pm.sendRequest(forge_url, function (err, res) { if (err) { console.error(err); } else { console.info("request forgs.js: Succeed, please try again"); pm.globals.set('forgeJS', res.text()); } } ); } eval(pm.globals.get('forgeJS')); keyText = priencrypt(priencrypt_key,enckey); |
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理