接口调试新姿势

H5 接口参数加密?DevPeek 一键解密调试

H5 页面请求后端 API 时,参数做了 AES 加密——{"userId":"123","keyword":"看不到我"} 变成了 { "data": "6be9792e5ed250fc..." }。联调的时候,你在 DevPeek 抓包列表里看到的永远是一串 hex,完全不知道发出去的是什么。

DevPeek 目前也没法直接看懂它:

这是很多内嵌 H5 的常见做法:请求体整体对称加密,后端收到后解密。出于安全考量这么做无可厚非,但联调时看不到明文参数,Mock 规则没法写、断点不知道改什么、问题排查全靠猜。

本文用 DevPeek 的参数转换功能演示如何让加密参数自动解密显示——只需配好规则,后续请求「密文进、明文出」。

适用读者

  • H5 联调时经常遇到接口参数加密的开发者
  • 正在用 / 想用 DevPeek 查看加密 API 请求的工程师
  • 不想在联调时反复找后端要解密程序或手动复制粘贴解码

容易卡住的地方

  1. AES 参数不对齐:密钥编码、IV 编码、输入编码的默认值和实际对不上,解密失败
  2. Auth Tag 位置搞错:GCM 的认证标签可能追加在密文末尾,也可能独立传递
  3. 只配了解密没配加密:改完参数想重发时,DevPeek 不知道如何重新加密

下面以 AES-256-GCM 加密为例(固定 IV、Tag 追加到密文末尾、hex 编码),演示完整的配置流程。

步骤一:配置加解密规则

在请求上右键 → 参数转换

在弹出的「参数转换规则」窗口中,先配置一条加解密规则(Conversion Rule),告诉 DevPeek 用什么算法、什么密钥来解密。

进入 加解密规则 Tab → 添加 → 内置转换 → 选择 AES-GCM

填入以下参数(这是最容易填错的地方,逐项核对):

字段 说明
算法 aes-gcm
密钥 (Key) 342e668900166e5f6731f7a172f52862e3a43da54611519dec5246dadb6e7429 SHA-256 派生的 256-bit 密钥
密钥编码 Hex ⚠️ 密钥是 hex 字符串,不是 UTF-8 文本
IV / Nonce a1b2c3d4e5f6a7b8c9d0e1f2 固定 12 字节 IV
IV / Nonce 编码 Hex ⚠️ 同上
密文输入编码 Hex ⚠️ Demo 输出的是 hex,不是 base64(DevPeek 默认是 base64)
输出编码 UTF-8 解密后的明文编码
Auth Tag 长度 16 GCM 默认 16 字节

为什么这三个编码容易踩坑?DevPeek 的内置 AES-GCM 默认 keyEncoding: utf8ivEncoding: utf8inputEncoding: base64,但我们的 Demo 用的是 hex。如果忘记改成 Hex,DevPeek 会用完全不同的字节去解密,结果必然是「解密失败」。遇到解密失败,先检查这三个编码

保存后,这条规则出现在加解密规则列表里。

完成标准: 加解密规则创建成功,列表显示一条 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(key+IV, authTagPlacement=append)
    │
    ▼ 结果挂在 record.paramTransformDerived 上
    │   原始请求 body 不变,旁边附加解密后明文
    │
    ▼ 展示:请求详情、Mock 匹配、调试重放

注意 DevPeek 不会修改原始请求——密文还是密文,解密后的明文单独存放在 paramTransformDerived 字段中,供界面展示和后续匹配使用。这保证了即使解密失败,原始数据也不会被破坏。

内置转换支持 AES-CBC、AES-ECB、AES-GCM、DES-CBC、3DES-CBC、RSA、Base64 等常见算法。如果这些不够用,还可以用脚本转换(Script Conversion)——在沙箱中自定义 JS 解密逻辑,脚本内可访问完整的请求上下文。沙箱内置了 util.cryptoutil.encodeutil.compressutil.json 等工具链,还提供了 axiosURLURLSearchParams 等 API,你可以直接发起 HTTP 调用获取密钥或远程解密,灵活应对动态 IV、动态密钥等复杂场景。

下一步

本文演示了固定 IV、Tag 追加的 AES-GCM 场景。实际项目中加密方案千差万别,如果你的接口参数加密方式不同(比如动态 IV 需要从请求体中提取、密钥需要远程获取),可以看看脚本转换功能——沙箱内置 axios、util.crypto 等 API,可以发起 HTTP 调用获取密钥,或远程解密后返回结果,灵活性更大。

想详细了解参数转换的配置项和所有内置算法,见参数转换文档


若你也在联调里一遍遍手工解码请求参数,欢迎下载 DevPeek 试用按本文步骤配好第一条解密规则,或到 GitHub Discussions 聊聊你的加密方案。

相关文档