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