⭐ 觉得好用?收藏备用,下次直接打开
🔒
密钥仅在本机浏览器内计算,不上传、不联网、不留存。请勿用于生产/真实账户的 2FA 密钥测试;任何因在公共设备粘贴密钥导致的泄露,本工具不承担责任。
当前验证码
––– –––
秒后刷新 · 下一个 ––––––
生成配置二维码(导入验证器 App)

TOTP 验证码 在浏览器本地生成基于时间的一次性口令(TOTP,RFC 6238),也就是各类两步验证(2FA)App 里那串每 30 秒刷新的 6 位动态码。输入 Base32 密钥或直接粘贴 otpauth:// 链接,即可实时出码并显示倒计时;可调位数、周期、算法,还能反向生成配置二维码供验证器扫码导入。全部计算在本机完成,密钥不上传、不联网。

它是怎么算出来的

  1. Base32 解码 密钥得到二进制 key
  2. 当前 Unix 时间 ÷ 周期(默认 30 秒)向下取整,作为计数器 counter
  3. 用 key 对 counter 做 HMAC-SHA1(或 SHA256/SHA512)
  4. 对结果做 动态截断(DT),取末几位十进制数即为验证码

因为双方用的是同一份密钥和同一个时间步,服务端无需联网通信也能验证你输入的码——这正是 TOTP 的精妙之处。

对不上码时的排查顺序

  1. 先看时间 — 设备时钟偏差是第一大原因,校准系统时间
  2. 再核参数 — 位数 / 周期 / 算法是否和服务端一致
  3. 后查密钥 — 是不是 Base32、有没有混入多余字符或错填成 Hex

⚠️ 安全提醒:动态码本身有效期很短,但密钥(seed)是长期凭证。不要在公共设备粘贴真实账户密钥,也不要把它截图、明文存档。本工具用于学习与调试,不替代正规验证器。

📍使用场景

  • 临时拿一个 2FA 验证码手机不在身边,但有备份的 Base32 密钥,粘进来就能算出当前 6 位动态码登录,倒计时还告诉你这个码还能用几秒。
  • 开发/测试两步验证功能后端实现 TOTP 登录时,用它对照验证:同一个密钥、同样的算法和周期,看自己服务端算出的码和这里是否一致,快速定位时间步、位数、Base32 解码的 bug。
  • 给应用生成配置二维码填好密钥、账户、发行方,一键生成 otpauth 二维码,用 Google Authenticator / 1Password / 微软 Authenticator 扫码导入,验证你的发码参数是否正确。

常见问题

我的密钥安全吗?会上传吗?

不上传。Base32 解码、HMAC 计算、出码全部在你浏览器本地用 Web Crypto API 完成,没有任何网络请求。但请注意:⚠️ 不要在公共/不可信设备上粘贴真实账户的 2FA 密钥,密钥一旦泄露等同于绕过你的两步验证。本工具仅适合学习、调试和临时取码。

它和 Google Authenticator 算出来的码一样吗?

一样,前提是参数一致。默认 SHA1、6 位、30 秒周期正是 Google Authenticator 等主流验证器的标准配置(RFC 6238)。只要密钥相同、设备时间准确,本工具和它们生成的动态码完全相同、同步刷新。

为什么我算出来的码和服务端对不上?

最常见是三类原因:① 设备时间不准——TOTP 完全依赖系统时间,差超过一个时间步就对不上,请校准时钟;② 参数不符——对方可能用了 SHA256/SHA512、8 位或 60 秒周期,需在选项里改成一致;③ 密钥格式——密钥必须是 Base32(仅 A–Z、2–7),不要误填 Hex 或带了多余字符。

支持 8 位、SHA256、60 秒这些非默认参数吗?

支持。位数可选 6/7/8,周期可选 15/30/60 秒,算法可选 SHA1/SHA256/SHA512,覆盖绝大多数服务的配置。粘贴标准 otpauth:// 链接时,里面带的 digits、period、algorithm、issuer 也会被自动解析填入。

什么是 Base32 密钥?大小写、空格有影响吗?

TOTP 密钥按 RFC 4648 Base32 编码,字符集是 A–Z 和 2–7。大小写不敏感、空格和短横线会被自动忽略(很多服务把密钥按 4 位一组带空格展示,直接整段粘贴即可)。结尾的 = 填充也会被忽略。

这能代替我的验证器 App 吗?

不建议长期替代。它没有加密存储、没有锁屏保护,密钥只是临时放在浏览器里。它的定位是开发调试、参数验证和应急取码;日常 2FA 请继续用 Authenticator App 或硬件密钥这类有安全存储的方案。