Postman加密接口测试

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

内容简介:一个接口,初期开发的时候没有考虑加密。最近突然想到需要加密传输的数据。比如客服端发送的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>

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

查看所有标签

猜你喜欢:

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

大话存储Ⅱ

大话存储Ⅱ

张冬 / 清华大学出版社 / 2011-5 / 99.00元

《大话存储2:存储系统架构与底层原理极限剖析》内容简介:网络存储是一个涉及计算机硬件以及网络协议/技术、操作系统以及专业软件等各方面综合知识的领域。目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。《大话存储2:存储系统架构与底层原理极限剖析》以特立独行的行文风格向读者阐述了整个网络存储系统。从硬盘到应用程序,对......一起来看看 《大话存储Ⅱ》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码