在线生成验证码安全吗?你的密钥到底有没有被上传?

最后更新:2026-09-10 · hokih.help

一句话答案:取决于它是"在你自己的设备上算",还是"把你的密钥发到服务器上算"。

前者,你的密钥从头到尾没离开过这台电脑;后者,你的密钥已经躺在别人的数据库里了。麻烦的是——这两种做法,从页面外观上几乎一模一样,你根本看不出来。这篇文章教你 30 秒分辨它们,也教你怎么当场验证(包括验证本站)。

先搞清楚:验证码和密钥,根本不是一回事

所以要害从来不是"验证码有没有被看到",而是——那串密钥有没有被传出去。

两种做法,天壤之别

做法一:浏览器本地计算(安全)
页面里写好了算法。你输入密钥后,浏览器用自带的加密接口(crypto.subtle)在你自己的设备上算出那 6 位数字。全程没有任何网络请求,密钥不出你这台机器。

做法二:放到服务器上算(有风险)
你把密钥填进去,页面把它 POST 到某台服务器,服务器算好再把结果回给你。这种写法代码更简单,但它意味着——你的密钥存在别人的机器上。 哪怕对方一句"我们只用来统计",密钥也已经不在你手里了。

30 秒分辨它是哪一种

方法一:断网测试(最直观)
把密钥填进去,等验证码正常跳起来之后——直接关掉WiFi、拔掉网线。如果验证码还在照常跳动,它就是本地算的。如果它立刻卡住、转圈、报错,那它一定在跟服务器通讯。

方法二:看网络请求(F12,最准)
按 F12 打开开发者工具 → 切到 Network(网络) 面板 → 刷新页面 → 开始输入你的密钥。
然后盯着这个面板看:如果在你输入密钥之后,它没有发出任何带着你密钥的请求,那就是本地算的。 如果有请求发出去,点开看看里面装的是什么。

方法三:看源码
页面上右键 → 查看网页源代码 → 搜索 crypto.subtle 或 hmac。算法如果写在页面自己的脚本里,说明它就在你这边跑。

方法四:把它存到本地,断网打开
把页面另存为一个 HTML 文件到桌面,断网,双击打开。能正常算出验证码,就说明它压根不依赖任何服务器。

小提醒:个别浏览器在"本地文件"模式下会限制加密接口,如果算不出来,多半是浏览器自己的安全策略,不代表工具本身有问题——这种情况用方法一或方法二更准。

密钥真的被上传了,会怎样?

拿到密钥的人可以:

换句话说:密码 + 密钥 = 账号。

所以别把密钥放在任何你没完全把握的地方:聊天记录、记事本、手机截图、云笔记的公开分享链接……都不行。

本站是怎么做的

顺便说:那串密钥该怎么存

推荐:

不要:

最后一件事:如果这串密钥不是你自己在账号后台生成的,而是别人给你的,那就尽早去账号设置里重新绑定一次两步验证,换成你自己新生成的密钥。旧的那串在对方手里留多久,你说了不算。

打开在线验证码生成器 →