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请求。