当 AI 成为你的调试搭子-和 Trae 一起破解黑盒的那几个小时

85 阅读5分钟

那个需求

"前端微信小程序需要对接后端的 ECIES 加密接口。"

产品经理说完这句话,我点了点头。听起来挺常规的,不就是加密解密吗?找个库,调个接口,应该很快就能搞定。

但我没想到,这个"常规"的需求,会让我在接下来的几个小时里,和 Trae 一起,一点点拆解一个黑盒。

第一个坑:环境限制

微信小程序的环境,大家都知道,限制很多。我习惯用的加密库,在小程序里跑不起来。试了几个方案,要么报错,要么功能不全。

最后只能选择 @noble 这个库。纯 JavaScript 实现,不依赖 Node.js 环境,理论上应该能在小程序里跑。

但问题是,@noble 提供的都是底层 API。没有现成的 ECIES 封装,需要自己手动拼接密文。

第二个坑:黑盒的后端

更麻烦的是,后端用的是 ECIES BC(Bouncy Castle)的实现。文档里只说了"标准 ECIES",但具体是什么标准?参数怎么配置?密文格式是什么?

问后端同事,他说:"就按标准来就行。"然后发给我一个 Java 的示例代码。

我盯着那段 Java 代码,试图理解它在做什么。但 Java 和 JavaScript 的加密库,API 设计完全不同。我需要在 JavaScript 里,用 @noble 的底层 API,手动拼出一个和 Java Bouncy Castle 兼容的密文。

这就像是要用积木搭出一座房子,但不知道房子的图纸,只知道最后的样子。

打开 Trae

我打开 Trae,开始写 prompt。

"我需要用 @noble 库在微信小程序中实现 ECIES 加密,后端是 Java Bouncy Castle 的实现,需要兼容..."

写到这里,我停住了。我发现我连问题都描述不清楚。我不知道 ECIES 的具体参数,不知道密文的格式,不知道哪些是必须的,哪些是可选的。

于是我换了个思路:"ECIES 加密的标准流程是什么?密文通常包含哪些部分?"

Trae 给了我一个答案。但当我按照这个答案去实现时,后端说格式不对。

一次次的尝试

我开始尝试各种组合。

"ECIES 的密文格式,如果使用 Bouncy Castle,会是什么样的?"

"@noble 库如何手动拼接 ECIES 密文?"

"ECIES 的 KDF 函数,Bouncy Castle 默认用的是什么?"

"ECIES 的 MAC 算法,标准实现通常用什么?"

每次 Trae 给我一个答案,我就去试。试了,不对,再问,再试。

有时候 Trae 给的代码能跑通,但后端解密失败。有时候代码本身就有问题,需要我手动修正。有时候逻辑是对的,但参数不对,需要我一点点调整。

这个过程很磨人。不是 Trae 不给力,而是这个问题本身就很复杂。ECIES 有很多变种,Bouncy Castle 的实现又有自己的默认配置。我需要找到那个"对的组合"。

那个瞬间

不知道试了多少次,当我再次运行代码,把加密结果发给后端时,他说:"对了。"

那一刻,我长舒了一口气。不是因为问题解决了,而是因为,我终于理解了整个流程。

ECIES 的密文,需要包含:公钥的压缩格式、加密的对称密钥、加密的数据、MAC 校验值。每个部分的长度、格式、编码方式,都有讲究。Bouncy Castle 的默认配置,和标准文档里的描述,还有细微差别。

这些细节,不是 Trae 直接告诉我的,而是我在和它的一次次对话中,一点点拼凑出来的。

不是答案,是思路

回头看那几小时的对话记录,我发现 Trae 很少给我"正确答案"。更多时候,它给我的是思路、是方向、是可能性。

比如,当我问"ECIES 密文格式"时,它不会直接给我 Bouncy Castle 的格式,而是告诉我标准的格式,然后让我自己去验证和调整。

比如,当我问"@noble 如何拼接密文"时,它不会给我完整的代码,而是告诉我每个部分应该怎么处理,然后让我自己去组合。

这种"不直接给答案"的方式,反而让我学到了更多。因为我在验证、调整、组合的过程中,真正理解了每个细节。

那些它做不到的

当然,有些东西 Trae 也帮不了我。

比如,它不知道我们后端的具体配置。它不知道微信小程序的环境限制。它不知道我们项目的具体需求。

这些,需要我去理解、去判断、去决策。

还有,当我试了很多次都不对时,那种挫败感,Trae 也感受不到。它只会继续给我新的建议,而我要决定:是继续试,还是换个思路?

新的协作方式

以前遇到这种问题,我会去 Stack Overflow 搜,去 GitHub 找示例,去文档里翻。现在,我会先和 Trae 讨论。

不是因为它比搜索引擎更准确,而是因为它能理解上下文。我可以和它对话,可以追问,可以质疑,可以一起探索。

这种协作,让我觉得不是在"用工具",而是在"和伙伴一起解决问题"。

关于那几小时

有人可能会说,花几个小时解决一个问题,效率不高啊。

但我觉得,这几小时很值。因为我不仅解决了问题,还理解了问题。下次遇到类似的情况,我知道怎么处理了。

而且,如果没有 Trae,我可能需要花更多时间。不是因为它帮我写了代码,而是因为它帮我理清了思路,让我少走了很多弯路。

写在最后

如果你问我,AI 工具改变了什么?

我会说,它改变了我和问题互动的方式。

以前,我是在"找答案"。现在,我是在"探索问题"。

以前,工具给我结果。现在,工具和我一起思考。

这种改变,让我觉得写代码这件事,更有意思了。