centos

CentOS中Postman如何进行数据加密

小樊
42
2025-10-13 00:52:08
栏目: 网络安全

CentOS中Postman数据加密的实现方法

在CentOS系统中使用Postman时,数据加密主要围绕传输加密存储加密请求/响应数据加密三个核心场景展开,以下是具体操作步骤:

一、基础安全配置(传输层加密与敏感信息保护)

在进行数据加密前,需先完成Postman的基础安全设置,确保传输通道安全及敏感信息不泄露:

二、存储数据加密(加密Postman中的敏感数据)

Postman支持对存储在本地的敏感数据进行加密,增加一层本地保护:

三、请求数据加密(动态加密请求参数/报文)

针对需要加密的API请求,可通过Pre-request Script(预请求脚本)动态加密请求数据,常见算法包括AES、RSA、MD5等:

1. AES对称加密(适用于高效加密场景)

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填充),替换原请求体。

2. RSA非对称加密(适用于高安全需求场景)

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公钥加密,适用于需要高安全性的场景。

3. MD5签名(适用于接口鉴权)

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测试的安全性。

0
看了该问题的人还看了