Postman通用接口加密解决方案_postman对字段进行smrsa解密(2)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

问题

  1. postman内置加密Api,但不支持RSA加解密码。如何用postman进入rsa加解密?
  2. postman中request对象属性皆为只读,如何把提交时的明文变为密文?

解决问题一

  • postman支持eval函数,我们只要将rsa代码存入环境变量中,在需要的时候调用eval函数就可以解决

解决问题二

  • postman在每次请求时都会先执行pre-request scripts 中的脚本,在此处我们可以通过request对象拿到
    此次请求的参数,但request中的参数只可读。
    所以我们只能通过环境变量去占位然后在去加密变量中的值,于是在请求时的内容就会变成加密的内容。
    针对postman对{{}}读取的方式,我们可以先在请求参数中将要加密的内容包裹进来,然后在动态创建此变量,
    并将变量的加密内容写入此环境变量中,最后在执行请求完毕后将此变量清除

例子

AES加密参数

  1. 必需用{{}}将内容包起来,因为在进行请求后postman遇到{{}}时会从环境变量中读取,如果有该环境变量则会动态替换。
  2. $符号后面是我们要加密的内容,可以直接填写内容或写入环境变量的名称

动态生成的环境变量

如果不想在环境变量夹中显示动态生成的环境变量可以将下方tests中的脚本加入到tests中
3. 点我领取全套自动化测试资料

相关脚本

  • 注意:将脚本加入到collections中会更好
  • Pre-request Scripts
// ------ 通用方法 ------
// 提取{{}}中内容
function getBracketStr(text) {
    let result = ''
    let regex = /\{\{(.+?)\}\}/g;
    let options = text.match(regex);
    if (options && options.length > 0) {
        let option = options[0];
        if (option) {
            result = option.substring(2, option.length - 2)
        }
    }
    
    return result
}


// ------ 导入RSA ------
if(!pm.globals.has("forgeJS")){
    pm.sendRequest("https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js", (err, res) => {
    if (!err) {
        pm.globals.set("forgeJS", res.text())
    }
})}

eval(postman.getGlobalVariable("forgeJS"));


// ------------ AES 加密 ------------
function aesEncrypt(content){
    //console.log('AES: ' + content);
    const key = CryptoJS.enc.Utf8.parse("Y5MUIOM7BUWI7BQR");
    const iv = CryptoJS.enc.Utf8.parse('S41AXIPFRFVJL73Z');
    const encrypted = CryptoJS.AES.encrypt(content, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
    return encrypted.toString();
}


// ------------ RSA 加密 ------------
function rsaEncrypt(content){
    const pubKey = pm.environment.get("RSA_Public_Key");
    if(pubKey){
        const publicKey = forge.pki.publicKeyFromPem(pubKey);
        const encryptedText = forge.util.encode64(
            publicKey.encrypt(content, 'RSAES-PKCS1-V1_5', {
              md: forge.md.sha1.create(),
              mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
        }));
        return encryptedText;
    }
}


// ------ 存储所有未加密环境变量 ------
if(!pm.environment.has('localStore')){
    pm.environment.set('localStore', '{}');
}
let localStore = JSON.parse(pm.environment.get('localStore'));
// 获取当前请求中的加密变量
let requestData; 
if((typeof request.data) === 'string'){
    requestData = JSON.parse(request.data)
} else {
    requestData = request.data;
}

requestData = Object.assign(requestData, request.headers);
Object.keys(requestData).map(key => {
    let value = requestData[key] + ''; // 内容
    if (value.indexOf('{{') !== -1) { // 是否为变量
        let content = getBracketStr(value);
        // 判断是否加密
        if (content.indexOf('aes$') !== -1) {
            let c = content.split('aes$')[1];
            let encryptedContent = pm.environment.get(c); // 加密内容
            encryptedContent = encryptedContent ? encryptedContent : c;
            pm.environment.set(content, aesEncrypt(encryptedContent));
            localStore[content] = aesEncrypt(encryptedContent);


![img](https://img-blog.csdnimg.cn/img_convert/2d53e12054eea2e15b869a901fd224aa.png)
![img](https://img-blog.csdnimg.cn/img_convert/ef0fce7b3021e4512a4235adbb746f32.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

戳这里获取](https://bbs.csdn.net/topics/618631832)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值