postman请求参数进行加密处理-以aes为例

postman Pre-request Script配置

将以下代码添加到collection或者接口的Pre-request Script

var aesKey = "key";
var aesIv = "iv";

let json = []
// 获取请求参数,加密后再放入json串中
for(key in request.data) {
    if(pm.environment.get(key)) {
        val = encrypt(pm.environment.get(key), aesKey, aesIv)
    } else {
        val = encrypt(request.data[key], aesKey, aesIv)
    }
    json.push({ "key": key, "value": val})
}

// formdata方式请求更新
pm.request.body.update({
    mode: 'formdata',
    formdata: json
});

// 其他请求方式示例
// Raw
// pm.request.body.update('Hello World!');

// URL Encoded
// pm.request.body.update({
//   mode: 'urlencoded',
//   urlencoded: [{
//        key: 'foo',
//        value: 'bar'
//    }]
//});

// postman自带CryptoJS模块进行aes加密
function encrypt(word, keyStr, ivStr) {
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var iv = CryptoJS.enc.Utf8.parse(ivStr);
    var encrypted = CryptoJS.AES.encrypt(word, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding
    });
    // encrypted = encodeURIComponent(encrypted)
    return encrypted.toString();
}

// postman自带CryptoJS模块进行aes解密
function aesDecrypt(word, keyStr, ivStr){
    var key = CryptoJS.enc.Utf8.parse(keyStr);
    var iv = CryptoJS.enc.Utf8.parse(ivStr);
    var srcs = CryptoJS.enc.Utf8.parse(word);
    var decrypted = CryptoJS.AES.decrypt(srcs, key, { 
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding:CryptoJS.pad.ZeroPadding 
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

部分引用:https://github.com/postmanlabs/postman-app-support/issues/4808

Visits: 161

使用虚拟列减少索引的扫描行数

假设现在有一张表记录了每个人的基本信息

create TABLE `t_people` (
  `id` INT(11) DEFAULT NULL ,
  `name` VARCHAR(20) DEFAULT NULL ,
  `age` INT(11) DEFAULT NULL ,
  `info` VARCHAR(255) DEFAULT NULL
)ENGINE = InnoDB;

里面总共有三条数据

INSERT INTO test.t_people (id, name, age, info, name_fist) VALUES (1, '张三', 8, null, '张');
INSERT INTO test.t_people (id, name, age, info, name_fist) VALUES (2, '李四', 12, null, '李');
INSERT INTO test.t_people (id, name, age, info, name_fist) VALUES (3, '张三', 11, null, '张');

现在我们需要找出姓名开头是张且年龄等于8的数据。

一、我们很容易想到给表添加名字和年龄的联合索引。

ALTER TABLE t_people ADD INDEX name_age_index(name, age);

搜索语句:

EXPLAIN SELECT * FROM t_people WHERE name LIKE '张%' AND age=8;

执行结果如下,总共扫描了2行

二、使用虚拟列

ALTER TABLE t_people add name_fist VARCHAR(2) GENERATED ALWAYS
as (left(name,1)),ADD INDEX name_fist_age_index(name_fist, age);

语句如下:

EXPLAIN SELECT * FROM t_people WHERE name_fist='张' AND age=8;

执行结果如下,只扫描了1行

总结:

1.虚拟列在插入的时候不能指定值,更新的时候也不能主动修改,它的值会根据定义自动修改。

2.查询优化的过程往往就是较少扫描行数的过程。

Visits: 2125