TOTP 验证码生成器

输入服务商为两步登录提供的密钥,本页面即会在您的浏览器中计算当前的一次性验证码,并显示倒计时、前后两个验证码,以及按计数器计算的 HOTP。

免费 在浏览器中运行 核对于2026年11月10日星期二

此工具在您的浏览器中运行。您输入的内容不会发送给我们。

使用方法

  1. 将服务两步验证页面上显示的密钥输入到输入框中,或粘贴其二维码中包含的 otpauth:// 文本。按显示可核对所输入的内容。
  2. 选择服务所指定的哈希算法、位数和周期。许多服务使用密钥 URI 格式的默认值:SHA-1、6位和30秒。
  3. 对于基于计数器的服务,选择基于计数器(HOTP)并输入计数器;计数器 + 1 可使其前进。
  4. 在剩余时间耗尽之前使用当前验证码;若您设备的时钟略有偏差,请核对上一个和下一个验证码。

验证码如何生成

HOTP(RFC 4226)以密钥和计数器为输入,对计数器计算带有所选哈希算法的 HMAC,并取其中四个字节(动态截断)。这四个字节所表示的数,对10的位数次方取模,即为验证码。

TOTP(RFC 6238)是以时间生成计数器的 HOTP:即 Unix 时间(秒)除以周期后向下取整。每个周期开始一个新的验证码,因此双方都需要准确的时钟。

TOTP = HOTP(key, floor(unix time / period));   HOTP = truncate(HMAC(key, counter)) mod 10^digits

密钥与 otpauth:// 链接

密钥是 Base32 文本(RFC 4648):字母 A 至 Z 与数字2至7。空格会被忽略,末尾的填充可以省略。含有该字符集以外字符,或长度不可能的密钥,会被拒绝。

otpauth:// 链接(Google 的密钥 URI 格式)包含类型、标签和密钥,以及可选的发行方、算法、位数、周期和计数器。缺少的设置采用该格式的默认值:SHA1、6位、30秒,计数器为0。

本页面如何校验

验证码已用 RFC 4226 附录 D 的测试值(计数为0至9)以及 RFC 6238 附录 B 的测试值(六次,分别针对 SHA-1、SHA-256 和 SHA-512,并使用8位)进行测试。HMAC 由您的浏览器的 SubtleCrypto 计算。

计算示例:RFC 6238 的测试密钥

RFC 的测试密钥为文本12345678901234567890,用 Base32 表示即 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ。在 Unix 时间59、周期为30秒的条件下,TOTP 的第1步在 SHA-1 下得出8位验证码94287082。

若取6位,同一步的结果为287082,即 RFC 4226 计数器1的验证码,也就是8位值的最后六位。

常见问题

密钥或验证码会被发送到服务器吗?

不会。验证码在您的浏览器中计算,页面不发出任何包含密钥或验证码的请求。没有任何内容被保存,刷新页面即会将两者都遗忘。

我应该把真实账户的密钥粘贴到这里吗?

只能在您信任的页面上,并且只在没有其他人能看到您屏幕的时候。真实账户通常应使用您的验证器应用,因为它会为日常使用保存密钥;本页面适合您自己的工具,以及只需使用一次的验证码。

为什么验证码每30秒变化一次?

基于时间的验证码(TOTP)使用自 Unix 纪元以来的周期数,因此每个周期都会开始一个新的验证码。倒计时显示当前验证码还能使用多久。

为什么我的验证码与服务商的应用不一致?

请核对密钥(只能是 Base32)、哈希算法、位数和周期,这些都由服务商指定;然后核对设备的时钟是否正确,因为基于时间的验证码依赖于它。上一个和下一个验证码有助于发现小的时钟偏差。

应该选择哪种哈希算法?

选择服务商所声明的那一种。SHA-1 是 RFC 4226 HOTP 和 otpauth 格式的默认值;RFC 6238 也允许 TOTP 使用 SHA-256 和 SHA-512。

TOTP 与 HOTP 有什么区别?

TOTP 使用时间,因此验证码随每个周期变化。HOTP 使用计数器,每次使用后计数器前进,因此在计数器改变之前,验证码保持不变。

otpauth:// 文本有什么作用?

它以密钥 URI 格式携带两步验证密钥的设置,通常包含在二维码中。把它粘贴到这里,即可自动填入密钥、哈希算法、位数、周期和计数器。

资料来源

数据和文字最近核对于2026年11月10日星期二。

我们使用必要的 Cookie 来运行网站。经您同意后,Google 还会使用广告 Cookie 展示个性化广告。如果您拒绝,仍会看到广告,但广告不会个性化。