Postman加密接口测试

一个接口,初期开发的时候没有考虑加密。最近突然想到需要加密传输的数据。
比如
客服端发送的json格式{“data”:{“key1”:“v1”, “key2”:“v2”}}
客服端收到的json格式{“data”:{“key1”:“v1”, “key2”:“v2”}}

我们的方案是直接将data的value加密,结果是{“data”:“encrypted with base64 string”}

以前写好的Postman要如何改造才能进行测试呢?
这就需要用到Postman的Pre-request script配合使用,
在发送的时候用一个参数来占位,比如
{“placeholder”:{“key1”:“v1”, “key2”:“v2”}, “data”:"{{data}}"}
在Pre-request script中获取placeholder的值,然后加密,将加密后的字符串存入环境变量data中即可。

如果加密的内容中有依赖环境变量的该如何办呢?我的解决方案就是用正则替换,比如

let value = postman.getEnvironmentVariable("key");/
let reg = /\{{(.*?)\}}/;
let param = request.data;
let data = param.replace(reg, value);

解密的时候可以在Postman的Tests中进行, 就不说了。

我用的是DES加密,分享一个js的DES测试用例, 来源于网络gist


<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>JS:DES-Test</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
        <script>
             //DES 加密
            function encryptByDES(message, key) {
                var keyHex = CryptoJS.enc.Utf8.parse(key);
                // console.log(CryptoJS.enc.Utf8.stringify(keyHex), CryptoJS.enc.Hex.stringify(keyHex));
                // console.log(CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(key).toString(CryptoJS.enc.Hex)));
                
                // CryptoJS use CBC as the default mode, and Pkcs7 as the default padding scheme
                var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
                    mode: CryptoJS.mode.ECB,
                    padding: CryptoJS.pad.Pkcs7
                });
                // decrypt encrypt result
                // var decrypted = CryptoJS.DES.decrypt(encrypted, keyHex, {
                //     mode: CryptoJS.mode.ECB,
                //     padding: CryptoJS.pad.Pkcs7
                // });
                // console.log(decrypted.toString(CryptoJS.enc.Utf8));
                // when mode is CryptoJS.mode.CBC (default mode), you must set iv param
                // var iv = 'inputvec';
                // var ivHex = CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(iv).toString(CryptoJS.enc.Hex));
                // var encrypted = CryptoJS.DES.encrypt(message, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC });
                // var decrypted = CryptoJS.DES.decrypt(encrypted, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC });
                // console.log('encrypted.toString()  -> base64(ciphertext)  :', encrypted.toString());
                // console.log('base64(ciphertext)    <- encrypted.toString():', encrypted.ciphertext.toString(CryptoJS.enc.Base64));
                // console.log('ciphertext.toString() -> ciphertext hex      :', encrypted.ciphertext.toString());
                return encrypted.toString();
            }
            /**
             * Decrypt ciphertext by DES in ECB mode and Pkcs7 padding scheme
             * 
             * @param  {String} ciphertext(base64 string)
             * @param  {String} key
             * @return {String} plaintext
             *
             */
            //DES 解密
            function decryptByDES(ciphertext, key) {
                var keyHex = CryptoJS.enc.Utf8.parse(key);
                // direct decrypt ciphertext
                var decrypted = CryptoJS.DES.decrypt({
                    ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
                }, keyHex, {
                    mode: CryptoJS.mode.ECB,
                    padding: CryptoJS.pad.Pkcs7
                });
                return decrypted.toString(CryptoJS.enc.Utf8);
            }
        </script>
        <script>
             //加密
            function encryptStr() {
                var strKey = $.trim($('#key').val());
                var strMsg = $.trim($('#text1').val());
                $('#text2').val(encryptByDES(strMsg, strKey));
            }
            //解密
            function decryptStr() {
                var strKey = $.trim($('#key').val());
                var ciphertext = $.trim($('#text2').val());
                $('#text3').val(decryptByDES(ciphertext, strKey));
            }
        </script>
    </head>
    <body>
        <h1>JS׃DES-Test</h1>
        <label>key</label>
        <input type="text" value='12345678' id="key" />        
        <div>
            <textarea id="text1" placeholder="原文" style="width:300px;"></textarea>        
        </div>
        <div>
            <input type="button" value="加密" onclick="encryptStr();" />            
            <textarea id="text2" placeholder="加密结果" style="width:300px;"></textarea>
        </div>
        <div>            
            <input type="button" value="解密" onclick="decryptStr();" />
            <textarea id="text3" placeholder="解密结果" style="width:300px;"></textarea>
        </div>
        
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值