在使用postman进行RSA加密时,发现很多答案只能进行一个字段的加密,当内容过长时就无法加密,因为RSA的填充方式限制,所以需要进行分段式加密,然后对加密内容进行拼接,拼接完成在对其进行编码返回。
pm.environment.set('Txx',Math.round(new Date()/1000));
//--------------以下为需要加密的内容,可以根据需求定义多个------------------//
var app_id_bian=pm.environment.get("app_id");
var request_time_bian=pm.environment.get("Txx");
var ext_info_bian=pm.environment.get("ext_info");
var clearText = '根据自己项目需要的内容进行填写';
//var clearText = 'app_id='+app_id_bian+'&ext_info='+ext_info_bian+'&request_time='+request_time_bian;
//---------------------------------------------------------------------//
const encrypt_key = "开发给的公钥";
const forge_url = 'https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js';
const len=53;//计算方式为秘钥默认长度(512/8)-11
//---------------------------------------------------------------------//
function encryptRsa(encrypt_key, clearText){
//注意此处上下的BEGIN PRIVATE KEY不要删除,框架自带的
const public_key = '-----BEGIN PUBLIC KEY-----\n'
+ encrypt_key
+ '\n'+'-----END PUBLIC KEY-----';
var publicKey = forge.pki.publicKeyFromPem(public_key);
var sign_key="";//用于存储加密内容
var buffer = forge.util.createBuffer(clearText , 'utf8');
var bytes = buffer.getBytes();
//进行分割加密
const splitCount=bytes.length/len;
for(let i=0;i<splitCount;i++){
var result=clearText.slice(i*len,(i+1)*len);//取得每次加密内容
//加密主体
var encryptedText = publicKey.encrypt(result,'RSAES-PKCS1-V1_5', {
md: forge.md.sha256.create(),
mgf1: {
md: forge.md.sha1.create()
}
});
sign_key=sign_key.concat(encryptedText);//拼接加密内容
};
var sign1=forge.util.encode64(sign_key);
return sign1;
};
// 第一次运行时从网络加载forgeJS,会导致请求失败
if(!pm.globals.has('forgeJS')){
pm.sendRequest(forge_url, function (err, res) {
if (err) {
console.error(err);
} else {
console.info("request forgs.js: Succeed, please try again");
//注意:Pre-request Script中出现报错,可能会导致pm.globals.set失效
pm.globals.set('forgeJS', res.text());
}
}
);
return;
}
eval(pm.globals.get('forgeJS'));
//------------------以下内容根据需要修改定义,可以加密多个字段------------------------//
var signText = encryptRsa(encrypt_key, clearText);
postman.setEnvironmentVariable("sign", signText); //rsaBody对应Body中{{}}