背景
有一个post请求,需要在header和body中动态计算uuid加密。
参考下网上资料,可以用 Scripts 功能实现。
功能点拆分
动态生成 uuid
对{uuid + 盐}进行 AES/CBC/pkcs5 加密
更新 header 中 signature 字段
更新请求 body 中的 uuid 相关字段
脚本实现
动态生成 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