postman中使用CryptoJS加解密

在postman中使用Pre-request Script

Pre-request Script的语法就是js的语法,在这里可以编写任意的逻辑。例如:

可以看到经过判断在console控制台输出了日志

在Pre-request Script配置变量在参数中使用

通过在Pre-request Script中编写内容,我们的最终目的一般是得到一个参数值,然后应用在请求中。下面是一个简单的演示:

  1. 首先点击 ,新建一个环境配置

  2. 单击add添加一个环境

  3. 输入环境名称,点击add

  4. 可以看到这里多出了一个环境设置,选中该设置。

  5. 在Pre-request Script中编写如图代码,点击发送。

    var pathName = "test";
    pm.environment.set("pathName",pathName);
    

参数不仅可以应用到url中还可以放在param、header、body等的参数中,这里不再进行演示。

  1. 可以从日志和code中看到传值,url中的变量已经被替换为test

  2. 在环境变量中也可以看到该参数

除上述方法外,还可以把变量放在全局中,这样可以不用新建环境,如:

var pathName = "test";
pm.globals.set("pathName",pathName);

postman的语法大家可以自己去探索,本文中将不再进行叙述。

CryptoJS常用方法的使用

  1. MD5加密
CryptoJS.MD5("待加密数据").toString();

这里可以看到对“test”字符串进行了MD5加密放在了url中

  1. SHA256加密
CryptoJS.SHA256("待加密数据").toString();
  1. HmacSHA256加密
CryptoJS.HmacSHA256("待加密数据", "秘钥")
  1. base64加密解密
// 加密 写法1
var utf8Str = CryptoJS.enc.Utf8.parse("待加密字符串")
CryptoJS.enc.Base64.stringify(utf8Str)
// 加密 写法2
CryptoJS.enc.Utf8.parse("待加密字符串").toString(CryptoJS.enc.Base64)

//  解密
CryptoJS.enc.Base64.parse("带解密").toString(CryptoJS.enc.Utf8)

// CryptoJS.enc.Base64.stringify("字符串")  和  "字符串".toString(CryptoJS.enc.Base64)  是相同的含义
  1. AES简单加密解密
// 加密
CryptoJS.AES.encrypt('待加密字符串', '秘钥').toString()
// 解密
CryptoJS.AES.decrypt('待解密字符串', '秘钥').toString(CryptoJS.enc.Utf8)
  1. 自定义AES加解密函数
   const key = CryptoJS.enc.Base64.parse("秘钥");  //这里使用base64 或者 utf8 要看要求,加解密一致即可
   const iv = CryptoJS.enc.Utf8.parse('偏移量');   //十六位十六进制数作为密钥偏移量
   // 加密 1
   function Encrypt(word) {
        let srcs = CryptoJS.enc.Utf8.parse(word);
        let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        return encrypted.toString();
    }
// 解密 1
  function Decrypt(word) {
        let decrypt = CryptoJS.AES.decrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }
// 加密 2
   function Encrypt(word) {
        let srcs = CryptoJS.enc.Utf8.parse(word);
        let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        return encrypted.ciphertext.toString();
    }
// 解密 2
  function Decrypt(word) {
        let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }

利用forgeJS进行RSA加解密

测试案例

postman内置的js不支持进行RSA加解密,所以需要引入forgeJS来实现。

引入外部js主要有三种方式

  1. 直接将整个js文件内容复制到Pre-request Script中
  2. 使用远程脚本
    if (!pm.globals.has("forgeJS")) {
        pm.sendRequest("http://localhost:8080/forge.js", function (err, res) {
            if (err) {
                console.log(err);
            } else {
                pm.globals.set("forgeJS", res.text());
            }
        })
    } else {
       eval(pm.globals.get("forgeJS"))
    	// 加解密内容
    }
    
  3. 将整个js脚本放到环境变量中,使用eval()函数引入内容,这种方法会导致postman修改环境变量特别卡,不建议使用
        eval(pm.environment.get("forgeJS"))
           const public_key = '-----BEGIN PUBLIC KEY-----\n' +
        'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDORoOSW2gbHl6s/YmS1jWxb954\n' +
        'X/jflZ2dK65oM/Bxii2Iba80IiC9+Sa1phmOVDAk+IVDsPNZ+YJ2Qg0hPmoLSLxe\n' +
        'f2A6ySJPl5su8TaGOuVZg1SRyk55bjHymQUnxryD/ml1EmBUaGcrs9FCiVBy38kg\n' +
        'eZNbCexucVQxn6OYlwIDAQAB\n' +
        '-----END PUBLIC KEY-----'
    
    const private_key = '-----BEGIN PRIVATE KEY-----\n' +
        'MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAM5Gg5JbaBseXqz9\n' +
        'iZLWNbFv3nhf+N+VnZ0rrmgz8HGKLYhtrzQiIL35JrWmGY5UMCT4hUOw81n5gnZC\n' +
        'DSE+agtIvF5/YDrJIk+Xmy7xNoY65VmDVJHKTnluMfKZBSfGvIP+aXUSYFRoZyuz\n' +
        '0UKJUHLfySB5k1sJ7G5xVDGfo5iXAgMBAAECgYEAk6KQZN4bQt2XsYS9RGUghOCm\n' +
        'f81g2NXCu00aROZ3vyvArxaiAVQzzwRWGkjJnb7PvoZJC0vIwKr+HxnjP9nmFufd\n' +
        '+0EnBT+imYSzrfZhfGGwyI6EIyy/XcoW5lf0xltx3w9mJicnR9kMzNtZ5mNGPMNn\n' +
        'CgAgjvZqnWYb+f6tb/ECQQD0tdpg8ts3puXclPe51my+LbKhEbyFSMzvtMTDCRmO\n' +
        'd0jrmZhQomsZacC8+l+2l6WTj5vrhVQlAVUeUJ7kldQNAkEA18q53wor6a4Cv0OL\n' +
        'xFzBWXRCMVFfyCWAFQUpTSGrIM/X4Lx30IZCShtvkdh1ky39b9T6lpOjES7MK4Dh\n' +
        'xttCMwJAUGBi6DEcm/zvxzIO5DVv5k9wOsNunoC4/4rqjf0xLcA0bV43z1RpxSEd\n' +
        'M3UxdvH8aqli10slxjnX0Ws9pWspCQJBALqSncgYzETbXaauqO5a4BUOrphjafPr\n' +
        'cGU8NCxrGsFg0p6NdO5G1pOqSvmHdIiPL9t8AjkkZs3Zb0+BvDOpqP8CQQDZhfh4\n' +
        '/c/Qzp4szj7+GXTZ1cmGwAuFo2/9uiumUAS3f19EpgoV9u9eyJ4gZPEBDvAjO961\n' +
        'kAjdja4DAy4SbCXy\n' +
        '-----END PRIVATE KEY-----'
    
    
    //encrypt text "plaintext"
    var publicKey = forge.pki.publicKeyFromPem(public_key);
    var encryptedText = forge.util.encode64(publicKey.encrypt("plaintext", 'RSA-OAEP', {
        md: forge.md.sha1.create(),
        mgf1: {
            md: forge.md.sha1.create()
        }
    }));
    console.log("encrypted text:" + encryptedText);
    
    // decrypt text
    var privateKey = forge.pki.privateKeyFromPem(private_key);
    var decryptedText = privateKey.decrypt(forge.util.decode64(encryptedText), 'RSA-OAEP', {
        md: forge.md.sha1.create(),
        mgf1: {
            md: forge.md.sha1.create()
        }
    });
    
    console.log("dectypted text:" + decryptedText);
    

    其他小技巧

  • {{$guid}}:添加一个V4风格GUID(如: aa002-44ac-45ca-aae3-52bf19650e2d)
  • {{$timestamp}}:将当前的时间戳,精确到秒
  • {{$randomInt}}:添加0和1000之间的随机整数
  • 在js脚本中
Math.round(new Date()) // 时间戳

参考资料

https://www.cnblogs.com/gina61/articles/13043627.html
https://www.jianshu.com/p/b107452e6071
https://www.cnblogs.com/xiaochongchong/p/7766718.html
https://testerhome.com/topics/14869

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值