TOTP 验证码
base32 密钥秒出 2FA 动态码——不用装 App
动态码到底是怎么算出来的
TOTP 把共享密钥和当前时间变成短码:两边都按 30 秒切窗口,拿密钥 HMAC 一下窗口号,截 6 位。密钥相同、时间相同,码就相同——不用联网,不用短信,路上没东西可截。
这个工具能做什么
- 📲 任意 base32 密钥出滚动动态码
- 🔢 6 位或 8 位,30 秒或 60 秒周期
- ⏳ 倒计时条告诉你码还有几秒作废
- 🔒 密钥只留在你的浏览器——本地算
什么时候用它
- 电脑前登录,手边没手机
- 测自己刚搭好的 2FA
- 留个读码的备用通道
隐私:密钥只在你的浏览器里参与计算——不传输、不存储、不记日志。
最后更新 · 2026-09-01
码是怎么算的
base32 解码的密钥加 30 秒窗口计数器,过 HMAC-SHA1;动态截断(RFC 4226)取 31 位再对 10 的位数次方取模。页面每半秒按系统时钟重渲染,后台标签页也准。
为什么在这里出码?
标准实现,不是近似
真 RFC 6238,走 RFC 4226 HMAC-SHA1 加动态截断——官方测试向量过的,码跟谷歌验证器逐位一致。
倒计时看得见
进度条精确显示当前码还剩几秒,再也不会剩 1 秒输进去然后纳闷为啥挂了。
密钥守得住
手写 SHA-1 本地跑,零网络请求——贴 2FA 密钥进来,谁也看不见,不像服务器端生成器。
常见问题
密钥去哪找?⌄
每个开 2FA 的服务都会在二维码旁边给一串文本密钥(一般写着手动输入或无法扫描)。形如 JBSWY3DPEHPK3PXP 的 base32,贴过来就行。
把 2FA 密钥贴进网站安全吗?⌄
在这个页面可以——构造上就是安全的:验证码全在你的浏览器本地算,密钥不发送、不存储、不记日志。但拿到密钥的人就能生成你的码,所以还是当密码一样保管。
码总被拒绝为什么?⌄
九成是时钟歪了:TOTP 吃的就是时间,先检查设备时间是不是自动对时。再看密钥是不是贴全了,服务要的是不是 30 秒 6 位码。
常见问题
密钥去哪找?
每个开 2FA 的服务都会在二维码旁边给一串文本密钥(一般写着手动输入或无法扫描)。形如 JBSWY3DPEHPK3PXP 的 base32,贴过来就行。
把 2FA 密钥贴进网站安全吗?
在这个页面可以——构造上就是安全的:验证码全在你的浏览器本地算,密钥不发送、不存储、不记日志。但拿到密钥的人就能生成你的码,所以还是当密码一样保管。
码总被拒绝为什么?
九成是时钟歪了:TOTP 吃的就是时间,先检查设备时间是不是自动对时。再看密钥是不是贴全了,服务要的是不是 30 秒 6 位码。