工具
指南

TOTP / HOTP 双因素验证码生成器

加密

从 Base32 密钥或 otpauth:// URI 生成基于时间(TOTP)或计数器(HOTP)的一次性密码。实时倒计时与可扫描二维码——全部在浏览器本地处理。

100% 客户端 无后端

不获取远程 URL;请直接粘贴你的 JSON。

模式
请输入 Base32 密钥(或粘贴 otpauth:// URI)以生成验证码。
TOTP
------
--
otpauth URI

可用 Google Authenticator、Authy、1Password 等任意 TOTP 应用扫描。

验证码在本地生成——密钥绝不离开浏览器。
本页内容

什么是 TOTP?#

基于时间的一次性密码(TOTP),就是你认证器 App 里每个账号旁边那个不断轮换的 6 位数字。它本质上是一个 HMAC:把共享密钥和当前时间窗口一起哈希,再把结果截成一段短数字码。因为依赖于时钟,它每 30 秒会自行滚动——这正是「你拥有的东西」(那把密钥)能在无需手机与服务之间任何网络往返的情况下、充当第二因素的原因。

本页是一个完整可用的 TOTP 与 HOTP 生成器。TOTP 从当前时间派生验证码,并随周期流逝自行刷新;HOTP 则从一个「每次使用后递增的计数器」派生。你可以直接输入 Base32 密钥,也可以粘贴一段 otpauth:// URI(开启 2FA 时服务给你看的二维码里编码的就是这串),让所有字段自动填好。本页还会产出规范的 otpauth:// URI 并渲染可扫描的二维码,方便你直接在这里把一个新账号配进手机 App。

一切都在本地运行:密钥绝不离开本页,也无需向任何认证服务发起在线请求。

怎么使用#

  1. 选择模式TOTP(基于时间,自行刷新)或 HOTP(基于计数器,手动推进)。
  2. 提供密钥。要么把 Base32 密钥粘进 secret 字段,要么把 otpauth:// URI 粘进 URI 字段,一次性自动填好全部参数。
  3. 填写 issueraccount 标签(这俩只影响该条目在认证器 App 里的命名,不影响验证码本身)。
  4. 选择 algorithm(SHA-1 / SHA-256 / SHA-512,SHA-1 是通用默认)、digits(6 / 7 / 8,6 是标准),以及——TOTP 下——以秒为单位的 period(默认 30)。HOTP 下设置 counter,并在每次使用后点 +1 推进。
  5. Generate。验证码以大号字体出现,并配有倒计时环显示当前周期还剩几秒;下方是 otpauth:// URI 与可扫描的二维码。

核心特性#

  • TOTP 与 HOTP 同处一屏。 在基于时间与基于计数器两种变体之间切换,无需重新输入密钥。
  • 宽容的 Base32 处理。 空格、连字符、小写、杂散字符都会被自动清理,从各种奇怪格式复制来的密钥照样能用。
  • URI 导入与导出。 粘贴 otpauth:// URI 一次性填满所有字段,或复制生成的 URI 去别处配账号。
  • 实时二维码。 由 URI 在页面内渲染,扫进任何认证器 App 即可。
  • 倒计时环。 用图形显示距离下次滚动还有多久,让你判断即将输入的验证码是否还有足够时间。
  • 零上传。 生成、解析、渲染二维码全部本地完成,密钥绝不外发。

实战示例#

RFC 6238 的参考种子是 ASCII 串 12345678901234567890,对应 Base32 为 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ。输入该密钥,设置 digits 8period 30,验证码将与公开的测试向量完全吻合:

  • SHA-1,时刻 = 纪元后第 59 秒 → 94287082
  • SHA-256,同一时刻 → 46119246
  • SHA-512,同一时刻 → 90693936

在时刻 = 1111111109(遥远未来的某个时间点),SHA-1 给出 07081804。这些正是本工具自身测试套件所校验的已知答案,因此是确认一个生成器正确与否的可靠依据。日常 2FA 场景下,服务普遍用 6 位、SHA-1、30 秒周期——把 digits 切回 6,同一把密钥就会产出认证器 App 会显示的那种滚动验证码。

常见问题#

我算出来的码和手机 App 对不上,哪里出了问题?#

几乎总是密钥或时钟的问题。首先确认 Base32 密钥完全一致——从服务的设置页重新复制一次,因为错一个字符就全变了。然后核对参数:多数服务用 SHA-1、6 位、30 秒周期;如果服务用的是 SHA-256 或 8 位,而你这头选的是 SHA-1 / 6 位,码自然对不上。最后,确保设备时钟准确——TOTP 能容忍一点偏差,但偏离约 30 秒以上就会失效。

TOTP 和 HOTP 有什么区别?#

TOTP 用「当前时间」作为推进因子,所以它每个周期自动滚动。HOTP 用一个简单计数器,每消费一个码就加一,因此双方必须就「已经用了多少个码」保持同步。如今几乎所有的消费者 2FA 都用 TOTP,因为除了时钟之外它不需要任何同步。

把密钥放进网页安全吗?#

密钥绝不离开本页——生成、解析、渲染二维码全部在浏览器本地完成,没有任何网络请求。话虽如此,对于你自有的生产级 2FA 密钥,最稳妥的做法是在你完全信任的环境里生成并保存,而不是粘进任何网页;同时务必妥善保管服务给你的恢复码。

为什么粘贴 otpauth:// URI 就能把所有字段填好?#

因为认证器 App 之间交换的就是这种标准格式:它把类型、issuer、account、密钥、算法、位数、周期(或计数器)编码进一串字符串。解析器把这些字段读出来填进表单,这与你用手机扫二维码是完全一样的事——二维码就是这段 URI 被渲染成了图像。