Postman加密接口测试

栏目: 编程工具 · 发布时间: 5年前

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

一个接口,初期开发的时候没有考虑加密。最近突然想到需要加密传输的数据。

比如

客服端发送的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>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming From The Ground Up

Programming From The Ground Up

Jonathan Bartlett / Bartlett Publishing / 2004-07-31 / USD 34.95

Programming from the Ground Up is an introduction to programming using assembly language on the Linux platform for x86 machines. It is a great book for novices who are just learning to program as wel......一起来看看 《Programming From The Ground Up》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具