postman script RSA分段加密

在Postman中使用RSA加密时,由于RSA填充方式的限制,对于过长的内容需进行分段加密。文章介绍了如何通过Forge库实现分段加密和内容拼接,以及如何结合Postman环境变量和全局变量进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


Postman 实现 RSA 加密请求的过程主要是通过预处理脚本(Pre-request Script)完成对请求数据的加密操作,并将加密后的结果放入实际发送的数据中。以下是实现步骤: ### 步骤详解 #### 1. 准备公钥和私钥 RSA 密码系统需要一对密钥:**公钥** 和 **私钥**。通常来说,客户端使用服务器提供的公钥加密信息,而服务器则用自己的私钥解密。 #### 2. 配置 Postman 环境变量 为了动态管理加密所需的信息,在环境设置里添加以下内容: - `publicKey` (用于前端加密) - 其他敏感字段如 token 或者 payload 数据等也需要定义好。 例如: ```json { "publicKey": "-----BEGIN PUBLIC KEY-----\n....your public key here...\n-----END PUBLIC KEY-----", "dataToEncrypt": "sensitive information" } ``` #### 3. 编写 Pre-request Script 进行加解密 利用 Node.js 的 crypto 模块来进行 rsa 加密运算。(注意postman内置支持) 在 pre-request script 中加入类似这样的代码片段: ```javascript const crypto = require('crypto'); pm.environment.set("encryptedData", ""); let publicKeyPEM = pm.environment.get("publicKey"); if (!publicKeyPEM) { console.error("Public Key not set in environment variables."); } else { let dataToBeEncrypted = pm.environment.get("dataToEncrypt"); const buffer = Buffer.from(dataToBeEncrypted); // Encrypt using the provided Public Key. var encrypted = crypto.publicEncrypt({ key: publicKeyPEM, padding: crypto.constants.RSA_PKCS1_PADDING }, buffer).toString('base64'); pm.environment.set("encryptedData", encrypted); } ``` 上面这个小段程序会读取指定环境中存储好的公开密匙以及待加密资料然後生成一个新的 base64 格式的字符串表示形式并且把它存入名为 `"encryptedData"` 的新环境变数当中去. #### 4. 设置 Request Body 使用加密后的值 然后你需要把刚才产生的加密後面放到你的 http 请求体之中,比如说 POST JSON 类型的话可以像下面这样做: ```json { "secretField" : "{{encryptedData}}" } ``` 这样当您发起此特定请求时它就会自动替换成我们之前计算出来的已编码版本啦! --- 以上就是如何借助 postman 来达成一次简单的基于 RSA 算法的安全通讯了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值