在CentOS系统中使用Postman时,数据加密主要围绕传输加密、存储加密、请求/响应数据加密三个核心场景展开,以下是具体操作步骤:
在进行数据加密前,需先完成Postman的基础安全设置,确保传输通道安全及敏感信息不泄露:
https://开头,启用SSL/TLS加密传输,防止数据在传输过程中被窃取或篡改。Settings → General),勾选“Do not save sensitive information”(不保存敏感信息),避免API密钥、密码等敏感数据持久化存储。Environment → Add),在请求中使用{{variable_name}}引用,避免硬编码。Settings → Proxy配置代理服务器,进一步保护网络通信安全。Postman支持对存储在本地的敏感数据进行加密,增加一层本地保护:
Settings → Security开启“Encrypt local data”(加密本地数据),输入主密码后,所有本地存储的集合、环境变量等数据将被加密。针对需要加密的API请求,可通过Pre-request Script(预请求脚本)动态加密请求数据,常见算法包括AES、RSA、MD5等:
AES是一种对称加密算法,加密与解密使用相同密钥。以下是在Pre-request Script中实现AES+Base64加密的示例:
// 定义AES密钥(需与后端一致)
var aesKey = "your-aes-key-123"; // 16/24/32位长度
// 判断是否为目标环境(如product环境)及POST请求
if ('POST' === request.method && 'product' === pm.environment.get("env")) {
// 加密函数(使用CryptoJS库)
function encrypt(word, keyStr) {
var key = CryptoJS.enc.Utf8.parse(keyStr);
var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString(); // 返回Base64加密字符串
}
// 获取请求体数据(需为JSON字符串)
var requestData = pm.request.body.raw;
// 执行加密
var encryptedData = encrypt(requestData, aesKey);
// 将加密后的数据设置为请求体
pm.request.body.raw = encryptedData;
}
说明:上述脚本会在发送POST请求前,将请求体数据用AES加密(ECB模式+PKCS7填充),替换原请求体。
RSA是一种非对称加密算法,使用公钥加密、私钥解密。适用于敏感数据(如密码、支付信息)的加密:
// 引入CryptoJS库(Postman内置)
const CryptoJS = require('crypto-js');
// 公钥(需从后端获取)
const publicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCozMxH2Mo
4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0/IzW7yWR7QkrmBL7jTKEn5u
+qKhbwKfBstIs+bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyeh
kd3qqGElvW/VDL5AaWTg0nLVkjRo9z+40RQzuVaE8AkAFmxZzow3x+VJXdi5+gcJ
wIDAQAB
-----END PUBLIC KEY-----`;
// 加密函数(使用RSA公钥)
function encryptRSA(data) {
const encrypted = CryptoJS.RSA.encrypt(data, publicKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs1
});
return encrypted.toString();
}
// 示例:加密请求参数
const requestData = { username: 'admin', password: '123456' };
const encryptedData = encryptRSA(JSON.stringify(requestData));
pm.request.body.raw = JSON.stringify({ data: encryptedData });
说明:上述脚本将请求参数转换为JSON字符串后,用RSA公钥加密,适用于需要高安全性的场景。
MD5是一种哈希算法,用于生成数据摘要(不可逆),常用于接口签名鉴权,防止数据篡改:
// 获取请求参数(包括URL query、body)
const params = pm.request.url.query.all();
const body = pm.request.body.raw ? JSON.parse(pm.request.body.raw) : {};
// 组合所有参数(按key升序排序)
let sortedParams = {};
Object.keys(params).sort().forEach(key => {
sortedParams[key] = params[key].value;
});
Object.keys(body).sort().forEach(key => {
sortedParams[key] = body[key];
});
// 添加appid和appsecret(需与后端一致)
sortedParams.appid = 'your-appid';
sortedParams.appsecret = 'your-appsecret';
// 生成签名字符串(key=value&key=value格式)
let signString = Object.keys(sortedParams)
.map(key => `${key}=${sortedParams[key]}`)
.join('&');
// 计算MD5并转为大写
const sign = CryptoJS.MD5(signString).toString().toUpperCase();
// 将签名添加到请求头
pm.request.headers.add({ key: 'sign', value: sign });
说明:上述脚本生成请求参数的MD5签名,添加到请求头中,用于后端验证请求合法性。
若接口返回加密数据(如AES加密的JSON字符串),可通过Tests脚本解密并提取有效信息:
// 引入CryptoJS库
const CryptoJS = require('crypto-js');
// 获取响应数据
const response = pm.response.json();
const encryptedData = response.data; // 假设返回的加密字段为data
// 定义AES密钥(需与加密密钥一致)
const aesKey = "your-aes-key-123";
// 解密函数
function decryptAES(encryptedText, keyStr) {
const key = CryptoJS.enc.Utf8.parse(keyStr);
const decryptedBytes = CryptoJS.AES.decrypt(encryptedText, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return decryptedBytes.toString(CryptoJS.enc.Utf8);
}
// 执行解密
try {
const decryptedData = decryptAES(encryptedData, aesKey);
console.log('Decrypted Data:', decryptedData);
// 将解密后的数据保存到环境变量(可选)
pm.environment.set('decrypted_data', decryptedData);
} catch (error) {
console.error('Decryption Error:', error.message);
}
说明:上述脚本解密接口返回的加密数据,并将结果保存到环境变量中,方便后续测试使用。
通过以上方法,可在CentOS系统中使用Postman实现数据加密,提升API测试的安全性。