Postman通用接口加密解决方案
前言:
很对小伙伴对于psotman接口加密不知道如何解决,这里给大家出了一个全网最详细的解决方案,希望能帮助到大家
问题
- postman内置加密Api,但不支持RSA加解密码。如何用postman进入rsa加解密?
- postman中request对象属性皆为只读,如何把提交时的明文变为密文?
解决问题一
- postman支持eval函数,我们只要将rsa代码存入环境变量中,在需要的时候调用eval函数就可以解决
解决问题二
- postman在每次请求时都会先执行pre-request scripts 中的脚本,在此处我们可以通过request对象拿到
此次请求的参数,但request中的参数只可读。
所以我们只能通过环境变量去占位然后在去加密变量中的值,于是在请求时的内容就会变成加密的内容。
针对postman对{{}}读取的方式,我们可以先在请求参数中将要加密的内容包裹进来,然后在动态创建此变量,
并将变量的加密内容写入此环境变量中,最后在执行请求完毕后将此变量清除
例子
AES加密参数
- 必需用{{}}将内容包起来,因为在进行请求后postman遇到{{}}时会从环境变量中读取,如果有该环境变量则会动态替换。
-
$符号后面是我们要加密的内容,可以直接填写内容或写入环境变量的名称
动态生成的环境变量
如果不想在环境变量夹中显示动态生成的环境变量可以将下方tests中的脚本加入到tests中
相关脚本
- 注意:将脚本加入到collections中会更好
- Pre-request Scripts
-
// ------ 通用方法 ------
-
// 提取{{}}中内容
-
function getBracketStr(text) {
-
let result = ''
-
let regex = /\{\{(. ?)\}\}/g;
-
let options = text.match(regex);
-
if (options && options.length > 0) {
-
let option = options[0];
-
if (option) {
-
result = option.substring(2, option.length - 2)
-
}
-
}
-
-
return result
-
}
-
-
-
// ------ 导入RSA ------
-
if(!pm.globals.has("forgeJS")){
-
pm.sendRequest("https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js", (err, res) => {
-
if (!err) {
-
pm.globals.set("forgeJS", res.text())
-
}
-
})}
-
-
eval(postman.getGlobalVariable("forgeJS"));
-
-
-
// ------------ AES 加密 ------------
-
function aesEncrypt(content){
-
//console.log('AES: ' content);
-
const key = CryptoJS.enc.Utf8.parse("Y5MUIOM7BUWI7BQR");
-
const iv = CryptoJS.enc.Utf8.parse('S41AXIPFRFVJL73Z');
-
const encrypted = CryptoJS.AES.encrypt(content, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
-
return encrypted.toString();
-
}
-
-
-
// ------------ RSA 加密 ------------
-
function rsaEncrypt(content){
-
const pubKey = pm.environment.get("RSA_Public_Key");
-
if(pubKey){
-
const publicKey = forge.pki.publicKeyFromPem(pubKey);
-
const encryptedText = forge.util.encode64(
-
publicKey.encrypt(content, 'RSAES-PKCS1-V1_5', {
-
md: forge.md.sha1.create(),
-
mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
-
}));
-
return encryptedText;
-
}
-
}
-
-
-
// ------ 存储所有未加密环境变量 ------
-
if(!pm.environment.has('localStore')){
-
pm.environment.set('localStore', '{}');
-
}
-
let localStore = JSON.parse(pm.environment.get('localStore'));
-
// 获取当前请求中的加密变量
-
let requestData;
-
if((typeof request.data) === 'string'){
-
requestData = JSON.parse(request.data)
-
} else {
-
requestData = request.data;
-
}
-
-
requestData = Object.assign(requestData, request.headers);
-
Object.keys(requestData).map(key => {
-
let value = requestData[key] ''; // 内容
-
if (value.indexOf('{{') !== -1) { // 是否为变量
-
let content = getBracketStr(value);
-
// 判断是否加密
-
if (content.indexOf('aes$') !== -1) {
-
let c = content.split('aes$')[1];
-
let encryptedContent = pm.environment.get(c); // 加密内容
-
encryptedContent = encryptedContent ? encryptedContent : c;
-
pm.environment.set(content, aesEncrypt(encryptedContent));
-
localStore[content] = aesEncrypt(encryptedContent);
-
} else if (content.indexOf('rsa$') !== -1) {
-
let c = content.split('rsa$')[1];
-
let encryptedContent = pm.environment.get(c); // 加密内容
-
encryptedContent = encryptedContent ? encryptedContent : c;
-
pm.environment.set(content, rsaEncrypt(encryptedContent));
-
localStore[content] = rsaEncrypt(encryptedContent);
-
}
-
}
-
});
-
-
pm.environment.set('localStore', JSON.stringify(localStore));
- Tests scripts
-
// 还原变量
-
if(!pm.environment.has('localStore')){
-
pm.environment.set('localStore', '{}');
-
}
-
let localStore = JSON.parse(pm.environment.get('localStore'));
-
Object.keys(localStore).map(key => {
-
pm.environment.unset(key)
-
});
-
-
pm.environment.unset('localStore')
文章到这里就结束了,各位铁汁如果有什么觉得不对的可以发在评论区咱们来讨论哈,
听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfifjka
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01