Postman scripts实现AES/CBC/Pkcs5加密

2024-12-10  本文已影响0人  h080294

背景

有一个post请求,需要在header和body中动态计算uuid加密。

参考下网上资料,可以用 Scripts 功能实现。

功能点拆分

脚本实现

动态生成 uuid

const uuidV4 = require('uuid');
let uuid = uuidV4.v4();

AES/CBC/pkcs5 加密

const keyStr = 'yourKey';
const keyiv = 'yourIV';

// AES加密
function encrypt(content) {
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var iv = CryptoJS.enc.Utf8.parse(keyiv);
    var srcs = CryptoJS.enc.Utf8.parse(content);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    return encrypted.toString();
}

let content = 'something';
encryptedText = encrypt(content);
console.log('=====ApiKeys:' + encryptedText);

更新 header 中 signature 字段

// 更新 header 参数
pm.request.headers.upsert({
    key: 'signature',
    value: encryptedText
})

更新请求 body 中的 uuid 相关字段

// 更新body
function updataIds() {
    let body = JSON.parse(pm.request.body.raw);
    // 更新 body 中的 uuid 值
    body.id = uuid;
    pm.request.body.raw=JSON.stringify(body);
}

updataIds();

完整脚本

// Script for AES/CBC/Pkcs5 encrypt uuid parm

const uuidV4 = require('uuid');
const keyStr = 'yourKey';
const keyiv = 'yourKeyIV';

// 生成-UUID
function getUUID() {
    return uuidV4.v4();
}

// 时间戳-毫秒
function getCurrnetTime() {
    return new Date().getTime();
}

// AES加密
function encrypt(content) {
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var iv = CryptoJS.enc.Utf8.parse(keyiv);
    var srcs = CryptoJS.enc.Utf8.parse(content);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    return encrypted.toString();
}

let uuid = getUUID();
console.log('======uuid: ' + uuid );

// 组装加密参数
function getSingleText() {
    let timestamp = getCurrnetTime();
    return keyiv + '|' + uuid + '|' + timestamp.toString();
}

// 更新body
function updataIds() {
    let body = JSON.parse(pm.request.body.raw);
    body.id = uuid;
    pm.request.body.raw=JSON.stringify(body);
}

let signText = getSingleText();
console.log('======signText: ' + signText);

encryptedText = encrypt(signText);
console.log('=====ApiKeys:' + encryptedText);

// 更新 header 参数
pm.request.headers.upsert({
    key: 'signature',
    value: encryptedText
})

// 更新 body 参数
updataIds();

实践

点击 Pre-req -> Scripts Tab -> 输入 javaScripts 脚本


打开 console -> 发送请求 -> 观察请求 log 及结果


console
上一篇 下一篇

猜你喜欢

热点阅读