postman script RSA分段加密

在使用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中{{}}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值