postman测试base64_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

JS:DES-Test

//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)

// 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);

}

//加密

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));

}

JS׃DES-Test

key


版权声明:本文为weixin_39742727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。