H5 接口参数加密?DevPeek 一键解密调试 本文首发于 DevPeek 博客作者DevPeek 团队。转载须保留此声明。H5 接口参数加密DevPeek 一键解密调试联调时接口参数 AES 加密看不到明文用 DevPeek 参数转换功能填好密钥和 IV 就能自动解密还能改参重放。H5 页面请求后端 API 时参数做了 AES 加密——{userId:123,keyword:看不到我}变成了{ data: 6be9792e5ed250fc... }。联调的时候你在 DevPeek 抓包列表里看到的永远是一串 hex完全不知道发出去的是什么。DevPeek 目前也没法直接看懂它这是很多内嵌 H5 的常见做法请求体整体对称加密后端收到后解密。出于安全考量这么做无可厚非但联调时看不到明文参数Mock 规则没法写、断点不知道改什么、问题排查全靠猜。本文用 DevPeek 的参数转换功能演示如何让加密参数自动解密显示——只需配好规则后续请求「密文进、明文出」。适用读者H5 联调时经常遇到接口参数加密的开发者正在用 / 想用 DevPeek 查看加密 API 请求的工程师不想在联调时反复找后端要解密程序或手动复制粘贴解码容易卡住的地方AES 参数不对齐密钥编码、IV 编码、输入编码的默认值和实际对不上解密失败Auth Tag 位置搞错GCM 的认证标签可能追加在密文末尾也可能独立传递只配了解密没配加密改完参数想重发时DevPeek 不知道如何重新加密下面以 AES-256-GCM 加密为例固定 IV、Tag 追加到密文末尾、hex 编码演示完整的配置流程。步骤一配置加解密规则在请求上右键 →参数转换在弹出的「参数转换规则」窗口中先配置一条加解密规则Conversion Rule告诉 DevPeek 用什么算法、什么密钥来解密。进入加解密规则Tab → 添加 →内置转换→ 选择AES-GCM填入以下参数这是最容易填错的地方逐项核对字段值说明算法aes-gcm密钥 (Key)342e668900166e5f6731f7a172f52862e3a43da54611519dec5246dadb6e7429SHA-256 派生的 256-bit 密钥密钥编码Hex⚠️密钥是 hex 字符串不是 UTF-8 文本IV / Noncea1b2c3d4e5f6a7b8c9d0e1f2固定 12 字节 IVIV / Nonce 编码Hex⚠️同上密文输入编码Hex⚠️Demo 输出的是 hex不是 base64DevPeek 默认是 base64输出编码UTF-8解密后的明文编码Auth Tag 长度16GCM 默认 16 字节为什么这三个编码容易踩坑DevPeek 的内置 AES-GCM 默认keyEncoding: utf8、ivEncoding: utf8、inputEncoding: base64但我们的 Demo 用的是 hex。如果忘记改成 HexDevPeek 会用完全不同的字节去解密结果必然是「解密失败」。遇到解密失败先检查这三个编码。保存后这条规则出现在加解密规则列表里。完成标准加解密规则创建成功列表显示一条 AES-GCM 规则。步骤二配置参数转换规则回到参数转换规则窗口添加一条新规则。这里要告诉 DevPeek哪个请求的哪个字段需要用上一步的规则来解密。匹配条件勾选匹配条件后右侧会实时预览当前选中请求的特征字段值URL 匹配/api/query请求方法POST作用域此处可以先选「手动」确保只对当前请求生效转换目标Body › JSON › data——告诉 DevPeek 要去解密 Body 中data字段的值。引用规则选择第一步创建的 AES-GCM 加解密规则。此时右侧会立即预览解密结果如果一切正确你会看到data字段的密文被解码为{userId:123,keyword:看不到我}这样的明文。保存规则。回到请求列表重新看刚才的请求data字段旁边多了解密后的明文一目了然。完成标准请求详情中data字段显示解密后的明文参数。进阶开启双向转换配好解密后你还可以开启「双向转换」这样在调试窗口修改明文参数后DevPeek 会自动重新加密再发送。在参数转换规则中打开「双向转换」开关开启前密文可编辑、明文只读显示——你可以手工修改密文再重发但需要自己构造合法的加密数据。开启后密文变为只读明文变为可编辑改完点「发送」DevPeek 会自动重新加密这样一来调试时改参数就不需要自己操心加密过程了。原理DevPeek 参数转换的工作方式参数转换本质上是一个匹配 → 提取 → 解密 → 展示的管道请求到达 DevPeek │ ▼ 匹配 paramTransformRules │ URL: /api/query, Method: POST │ ▼ 提取目标字段值 │ body:json:data → 6be9792e5e... │ ▼ 引用 conversionRule 执行解密 │ AES-256-GCM(keyIV, authTagPlacementappend) │ ▼ 结果挂在 record.paramTransformDerived 上 │ 原始请求 body 不变旁边附加解密后明文 │ ▼ 展示请求详情、Mock 匹配、调试重放注意 DevPeek不会修改原始请求——密文还是密文解密后的明文单独存放在paramTransformDerived字段中供界面展示和后续匹配使用。这保证了即使解密失败原始数据也不会被破坏。内置转换支持 AES-CBC、AES-ECB、AES-GCM、DES-CBC、3DES-CBC、RSA、Base64 等常见算法。如果这些不够用还可以用脚本转换Script Conversion——在沙箱中自定义 JS 解密逻辑脚本内可访问完整的请求上下文。沙箱内置了util.crypto、util.encode、util.compress、util.json等工具链还提供了axios、URL、URLSearchParams等 API你可以直接发起 HTTP 调用获取密钥或远程解密灵活应对动态 IV、动态密钥等复杂场景。下一步本文演示了固定 IV、Tag 追加的 AES-GCM 场景。实际项目中加密方案千差万别如果你的接口参数加密方式不同比如动态 IV 需要从请求体中提取、密钥需要远程获取可以看看 DevPeek 的脚本转换功能——沙箱内置 axios、util.crypto 等 API可以发起 HTTP 调用获取密钥或远程解密后返回结果灵活性更大。想详细了解参数转换的配置项和所有内置算法请查阅 DevPeek 官方文档。若你也在联调里一遍遍手工解码请求参数欢迎下载 DevPeek 试用或到 GitHub Discussions 聊聊你的加密方案。

本月热点