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>

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

查看所有标签

猜你喜欢:

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

密码学原理与实践

密码学原理与实践

[加]Douglas R.Stinson / 冯登国 / 电子工业出版社 / 2009年 / 55.00元

冯登国(FENG Dengguo,1965.5~), 现为中国科学院软件所研究员、博士生导师,信息安全国家重点实验室主任,国家计算机网络入侵防范中心主任,国家信息化专家咨询委员会委员。目前主要从事信息与网络安全方面的研究与开发工作。一起来看看 《密码学原理与实践》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

UNIX 时间戳转换