输入 MFA 密钥,直接在这个页面算出 6 位动态码,密钥一个字节都不会发到服务器。
空格、短横线、大小写都会自动处理。粘贴认证器导出的 otpauth:// 链接时,位数、周期、算法会自动填好。
阿里云、腾讯云、AWS、GitHub、Google 全部用默认的 6 位 / 30 秒 / SHA1,不用改。
一句话结论:这是一个把 MFA 密钥留在你自己浏览器里的 TOTP 验证码生成器。你粘贴 Base32 密钥,页面用设备上的 Web Crypto 算出 6 位动态码,每 30 秒换一次。整个过程没有任何一次网络请求。
MFA 是多因素认证的简称,第二因素通常就是这串每半分钟一变的数字,标准名字叫 TOTP。阿里云、腾讯云、AWS、GitHub 开启两步验证后要填的就是它。
常见场景有三种:手机不在身边、认证器装在另一台设备上、临时要给同事一个一次性的码。网页版这时候能顶上,前提是它不碰你的密钥。
connect-src 'none',浏览器会直接禁掉所有发送通道。就算哪天这个页面被人塞进恶意代码,它也没有任何办法把你的密钥送出去。不信可以自己验:按 F12 打开「网络」面板再输一次密钥,全程是零请求;或者断网开飞行模式,这个页面照样出码。
| 对比项 | 服务端计算的工具 | 本页 |
|---|---|---|
| 密钥去向 | 明文提交到对方服务器 | 留在浏览器,零请求 |
| 计算位置 | 对方服务端 | 你的设备,Web Crypto |
| 关掉页面之后 | 对方日志里可能还有 | 什么都不剩 |
| 断网可用 | 不可用 | 可用 |
| 第三方依赖 | CDN、统计脚本等 | 零 |
| 外发防护 | 无 | CSP 浏览器强制 |
两边算出来的数字完全一样,TOTP 是公开算法。服务端计算多出来的只有风险,没有收益。
otpauth:// 链接。不会。页面没有任何后端接口,密钥从输入框到验证码全程只在你的浏览器里流转。CSP 规则 connect-src 'none' 由浏览器强制执行,所有发送通道在页面加载时就被禁掉了。
能。TOTP 的输入只有两个:密钥和当前时间。页面加载完成后断网或者开飞行模式,验证码照样每 30 秒刷新一次。这也是判断一个在线工具是否真的本地计算最简单的办法。
密钥是种子,验证码是种子加当前时间算出来的结果。验证码 30 秒就作废,密钥一旦泄露,对方可以永久生成这个账号的全部动态码。所以把密钥提交给任何服务端,都等于交出第二把锁的钥匙。
支持 6 位、7 位、8 位,30 秒和 60 秒两种周期,SHA1、SHA256、SHA512 三种算法。阿里云、腾讯云、AWS、GitHub、Google 全部使用默认的 6 位 / 30 秒 / SHA1,直接粘贴密钥就能出码,高级参数不用动。
认证器导出的二维码,内容就是一条 otpauth:// 链接。把整条链接粘进输入框,页面会自动拆出密钥、位数、周期、算法和账号名。链接里的账号名属于外部输入,进页面之前会先做转义。
九成情况是设备时间不准。TOTP 按统一时间分片,本地时钟偏差超过 30 秒就会算到相邻窗口。把系统时间设成自动同步再刷新即可,剩下的情况检查位数和周期是否和服务商一致。
刻意不做。任何持久化都会削弱「关掉页面就没了」这个承诺。密钥更适合放在密码管理器或认证器里,这个页面只负责一次性计算。