背景

在测试过程中,有个接口需要加密后再传参请求,使用postman/apifox请求,请求方式post,body类型application/json,使用javascript编写加密逻辑

加密方式

首先请求体内data内容转为json 字符串,然后通过 AES/ECB/PKCS5Padding 算法把json字符串加密为byte[],再将加密结果byte[]转为hex字符串(小写)
示例:如请求体内,data字段未加密前内容为{"a":1,"b":2} 为待加密内容,加密key为:1122112233445566,加密结果: a93116455c46f357af37eced209f4138 

实现过程


1、请求body如下


{
    "command": "string ",
    "sign": "string",
    "stamp": 1,
    "data":"{{encryptedData}}"
}

2、在前置处理对data进行加密处理,代码如下


const CryptoJS = require('crypto-js');

// data字段未加密前内容
const data = {
    "a":1,"b":2
  };

// 加密密钥
const keys = '112233445566';

// 将 data 转换为 JSON 字符串
const dataStrs = JSON.stringify(data);

// 使用 AES/ECB/PKCS5Padding 算法进行加密
function encryptData(dataStrs, keys) {
    // 将密钥转换为字节
    const key = CryptoJS.enc.Utf8.parse(keys);

    // 将数据转换为 字节
    const dataStr = CryptoJS.enc.Utf8.parse(dataStrs);

    // 使用 AES/ECB/PKCS5Padding 算法进行加密
    const encrypted = CryptoJS.AES.encrypt(dataStr, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });

    // 将加密结果转换为十六进制字符串(小写)
    const encryptedHex = encrypted.ciphertext.toString().toLowerCase();

    return encryptedHex;
}

// 调用加密函数
const encryptedData = encryptData(dataStrs, keys);
//将加密结果设置成临时变量,用于body引用变量
pm.variables.set("encryptedData", encryptedData);
// console.log(encryptedData); 


 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐