用Get方式提交信息加密解密

本文介绍了JavaScript中的三种URL编码方法:escape(), encodeURI(), 和 encodeURIComponent()。详细解释了每种方法不进行编码的特殊字符,并提供了Java端解码示例。

在js中可以使用escape(), encodeURL(), encodeURIComponent(),三种方法都有一些不会被编码的符号:

escape():@ * / +

encodeURL():! @ # $& * ( ) = : / ; ? + ‘

encodeURIComponent():! * ( ) ‘

在java端可以使用URLDecoder.decode(“中文”, “UTF-8”);来进行解码

### 实现在Postman中对GET请求进行加密和解密 对于在Postman中的GET请求,可以通过预处理器脚本来实现数据的加密,并通过测试部分解析响应内容来进行解码。下面介绍一种方法来实现在发送之前使用AES算法加上Base64编码的方式加密查询字符串参数,在接收到服务器回应之后再对其进行相应解密。 #### 加密过程 为了确保只有当环境设置为生产(product)并且HTTP动作为GET时才执行加密操作,可以在Pre-request Script区域编写如下JavaScript代码: ```javascript if (pm.environment.get('environment') === 'product' && pm.request.method === 'GET'){ const cryptoJS = require("crypto-js"); let params = {}; pm.variables.forEach(function(variable){ if (!variable.key.startsWith('_')) { params[variable.key] = variable.value; } }); // 对参数按照字母顺序排序并拼接成URL形式 let queryString = Object.keys(params).sort().map(key => `${key}=${encodeURIComponent(params[key])}`).join('&'); // 使用CryptoJS库进行AES加密后再转成base64格式 var ciphertext = CryptoJS.AES.encrypt(queryString, "{{aesKey}}").toString(); var base64Ciphertext = Buffer.from(ciphertext).toString('base64'); // 将原始路径与新构建好的已加密query string组合起来形成最终url let urlObj = new URL(pm.request.url.toString()); urlObj.search = `data=${encodeURIComponent(base64Ciphertext)}`; pm.request.url.update(urlObj); } ``` 这段代码首先检查当前所选环境是否为`product`以及请求类型是不是GET;接着获取所有非内部使用的环境变量作为待加密的数据源;随后把这些键值对按ASCII字符表升序排列组成标准的查询串;最后调用CryptoJS库完成AES加密工作并将结果转换为Base64编码的形式附加到目标网址上[^1]。 #### 解密过程 一旦从服务端获得了回复,则可在Tests标签页内加入以下片段用于恢复被保护的信息: ```javascript // 假设返回的是JSON结构体中含有"data"字段存储着经过相同流程处理过的密文 let jsonData = pm.response.json(); try{ if(jsonData.data !== undefined){ // 反向操作先由base64还原回原本的cipher text var bytes = atob(jsonData.data); // 利用同样的秘钥解开payload获得明文 var decryptedBytes = CryptoJS.AES.decrypt(bytes, "{{aesKey}}"); console.log(decryptedBytes.toString(CryptoJS.enc.Utf8)); }else{ throw "Response does not contain expected data field."; } }catch(error){ console.error(`Decryption failed: ${error}`); } ``` 此段逻辑尝试访问API反馈里的特定属性(这里假设叫作`data`),如果存在的话即刻着手于其上的逆变换——先是把Base64表示变更为普通的字符串表达式,紧接着借助先前指定的秘密钥匙解锁出初始提交给后端审查之前的纯文本版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值