RSA公钥加密和私钥加密整个结构是一致的,《Postman报文进行加密之RSA+Bate64》中私钥做的签名,这里RSA公钥是进行加密。
//--------RSA使用公钥对AES密码进行加密-------------// function pubencrypt(pubencrypt_key, aeskey){ console.info('pubencrypt_key:'+pubencrypt_key); console.info('aeskey: ' + aeskey); //注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的 const public_key = '-----BEGIN PUBLIC KEY-----\n' + pubencrypt_key + '\n-----END PUBLIC KEY-----'; var publicKey = forge.pki.publicKeyFromPem(public_key); var buffer = forge.util.createBuffer(aeskey, 'utf8'); var bytes = buffer.getBytes(); var pubencryptedText = forge.util.encode64( publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5', { md: forge.md.sha256.create(), mgf1: { md: forge.md.sha1.create() } }) ); console.info('pulencryptedText: '+ pubencryptedText); return pubencryptedText; } // 第一次运行时从网络加载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')); pubencryptedText = pubencrypt(pubencrypt_key,vkey); console.log(pubencryptedText); postman.setGlobalVariable("encryptkey",pubencryptedText)
这一段主要实现使用RSA公钥加密AES密码,AES密码是自己定义的,加密后的密文传递给变量"encryptkey",作为实际请求的参数。
'pubencrypt_key'是RSA公钥需要加上公钥的格式;
const public_key = '-----BEGIN PUBLIC KEY-----\n' + pubencrypt_key + '\n-----END PUBLIC KEY-----';
'aeskey'是自定义的AES密码;
forge.pki.publicKeyFromPem(public_key)转换pem格式的公钥;
forge.util.createBuffer(aeskey, 'utf8')创建缓冲区,设置编码格式;
buffer.getBytes()转成字节;
publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5')加密函数,把明文使用'RSAES-PKCS1-V1_5'加密成密文;
forge.util.encode64()把加密后的密文按照encode64进行编码输出;
setGlobalVariable()将密文赋值给Body栏目对应的字段;
这样需要签名加密的参数都完成了,就可以使用新Body发起HTTP请求。