首页主机资讯Ubuntu下Postman如何进行数据加密

Ubuntu下Postman如何进行数据加密

时间2025-12-22 12:43:04发布访客分类主机资讯浏览252
导读:Ubuntu下Postman数据加密实操指南 一 前置说明与安全边界 在 Ubuntu 上,Postman 的加密通常指两类:一是对请求参数做业务加密(如 AES、RSA、Base64、MD5),二是对传输通道启用 HTTPS/SSL 客...

Ubuntu下Postman数据加密实操指南

一 前置说明与安全边界

  • Ubuntu 上,Postman 的加密通常指两类:一是对请求参数做业务加密(如 AES、RSA、Base64、MD5),二是对传输通道启用 HTTPS/SSL 客户端证书。前者通过脚本在发送前处理,后者在 Postman 设置中导入证书,两者可叠加使用。
  • 客户端加密只能保护“网络传输中的内容”,无法替代后端的鉴权、签名与校验;密钥/IV 等敏感信息不要硬编码在脚本中,建议放入受控的变量或外部密钥管理服务。

二 在请求前对参数进行加密

  • 准备变量:在集合或环境的 Variables 中预置需要的变量,如 aes_key、aes_iv、RSA_Public_Key,请求体中使用占位符(如 { { encryptedData} } )。
  • 对称加密示例(AES-CBC + PKCS7,CryptoJS 内置):
// Pre-request Script
const CryptoJS = require('crypto-js');


function aesEncrypt(content, key, iv) {
    
  const k = CryptoJS.enc.Utf8.parse(key);
    
  const i = CryptoJS.enc.Utf8.parse(iv);

  return CryptoJS.AES.encrypt(content, k, {
 iv: i, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
    ).toString();

}
    

const plain = pm.environment.get('plainText') || 'admin';
    
const key  = pm.environment.get('aes_key');
       // 16/24/32 字节
const iv   = pm.environment.get('aes_iv');
        // 16 字节

pm.environment.set('encryptedData', aesEncrypt(plain, key, iv));

  • 非对称加密示例(RSA,forge.js):
// Pre-request Script
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());

  }
    );
    
  return;
 // 首次加载,等待下次请求再执行加密
}
    
eval(pm.globals.get('forgeJS'));


function rsaEncrypt(content, pubPem) {
    
  const pub = forge.pki.publicKeyFromPem(pubPem);

  return forge.util.encode64(pub.encrypt(content, 'RSAES-PKCS1-V1_5', {

    md: forge.md.sha1.create(),
    mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
  }
    ));

}
    

const data = pm.environment.get('plainText') || 'admin';
    
const pub = pm.environment.get('RSA_Public_Key');
     // PEM 格式
pm.environment.set('encryptedData', rsaEncrypt(data, pub));

  • 使用方式:在请求 Body/Params 中填入 { { encryptedData} } ,发送前脚本会自动替换为加密结果。

三 动态占位与批量加密

  • 约定占位语法:在需要加密的字段值写成 { { aes$varName} } { { rsa$varName} } ,脚本会自动识别并替换为加密结果。
  • 参考实现要点(放在集合级 Pre-request Script,便于复用):
// 动态占位与批量加密
function getBracketStr(t) {

  const m = t.match(/\{
\{
(.+?)\}
\}
    /);
    
  return m ? m[1] : '';

}


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());

  }
    );
    
  return;

}
    
eval(pm.globals.get('forgeJS'));
    

const aesEncrypt = (c, k, i) =>
 {
    
  const K = CryptoJS.enc.Utf8.parse(k), I = CryptoJS.enc.Utf8.parse(i);

  return CryptoJS.AES.encrypt(c, K, {
 iv: I, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
    ).toString();

}
    ;
    

const rsaEncrypt = (c, p) =>
 {
    
  const P = forge.pki.publicKeyFromPem(p);

  return forge.util.encode64(P.encrypt(c, 'RSAES-PKCS1-V1_5', {

    md: forge.md.sha1.create(), mgf: forge.mgf.mgf1.create(forge.md.sha1.create())
  }
    ));

}
    ;


const payload = typeof request.data === 'string' ? JSON.parse(request.data) : request.data || {
}
    ;

const headers = request.headers ? Object.assign({
}
, request.headers) : {
}
    ;

const all = Object.assign({
}
    , payload, headers);
    

Object.keys(all).forEach(k =>
 {
    
  const v = String(all[k]);
    
  const m = getBracketStr(v);
    
  if (!m) return;
    
  const [alg, src] = m.split('$');
    
  let enc = '';
    
  if (alg === 'aes') enc = aesEncrypt(pm.environment.get(src), pm.environment.get('aes_key'), pm.environment.get('aes_iv'));
    
  else if (alg === 'rsa') enc = rsaEncrypt(pm.environment.get(src), pm.environment.get('RSA_Public_Key'));

  if (enc) {
    
    if (payload[k]) payload[k] = enc;
    
    else headers[k] = enc;
    
    pm.environment.set(m, enc);
 // 便于调试与复用
  }

}
    );
    
  • 说明:首次运行会从网络加载 forge.js,可能导致该次请求跳过加密;再次发送即可生效。

四 配置SSL客户端证书与HTTPS

  • 在 Postman 顶部菜单进入 File → Settings → General → SSL certificate verification,点击 Add Certificate,按提示上传 CRT/PFX 证书及对应私钥(如证书受密码保护需输入密码),保存后发起以 https:// 开头的请求会自动携带客户端证书完成双向认证。

五 常见问题与最佳实践

  • 首次请求失败并伴随 “forge.js 未定义”:这是脚本按需加载 forge.js 所致,忽略首次失败,再次发送即可;也可将 forge.js 文件下载到本地并通过本地静态资源加载以提升稳定性。
  • 密钥与 IV 管理:避免硬编码,使用环境/集合变量集中管理;为 AES-CBC 选择足够强度的 key/iv(如 16/24/32 字节与 16 字节),并与服务端约定一致。
  • 编码与格式:RSA 输出通常为 Base64Base64 仅是编码并非加密,敏感信息仍需强加密;如请求体为 JSON,请确保加密后仍为合法字符串再赋值。
  • 清理敏感变量:在 Tests 脚本中按需清除临时变量(如 pm.environment.unset('encryptedData')),减少泄露面。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu下Postman如何进行数据加密
本文地址: https://pptw.com/jishu/777270.html
ubuntu分卷能分多少个区 如何在Ubuntu上设置Postman代理认证

游客 回复需填写必要信息