TOTP 和 HOTP 有什么区别?2FA 验证码到底是哪一种
很多人说“2FA 验证码”时,会默认所有验证码都一样。实际上,常见的一次性密码主要有两类:TOTP 和 HOTP。它们都能生成短数字码,看起来很像,但刷新逻辑完全不同。
先给结论:TOTP 按时间变化,常见周期是 30 秒;HOTP 按计数器变化,通常在生成或使用一次后向前推进。 Google Authenticator、Microsoft Authenticator、1Password、Bitwarden 等常见验证器里,大多数扫码登录场景使用的是 TOTP。
BaseToolbox 的2FA 验证码生成器主要面向标准 TOTP:可以输入 Base32 secret、粘贴 otpauth:// URL,或导入验证器二维码图片。
TOTP 和 HOTP 的直观区别
TOTP 是 Time-based One-Time Password,也就是基于时间的一次性密码。它用共享密钥和当前时间窗口计算验证码。只要密钥相同、时间同步,服务端和你的设备会在同一个时间窗口里算出同一个码。
HOTP 是 HMAC-based One-Time Password,也就是基于计数器的一次性密码。它用共享密钥和计数器计算验证码。计数器向前走以后,下一次验证码就会变化。如果服务端和设备的计数器不一致,就可能需要重新同步。
| 对比项 | TOTP | HOTP |
|---|---|---|
| 什么时候变 | 时间窗口变化 | 计数器推进 |
| 常见节奏 | 30 秒刷新 | 每次生成或使用后变化 |
| 常见程度 | 消费级验证器里很常见 | 相对少见 |
| 常见问题 | 设备时间不同步 | 计数器不同步 |
| 本站工具 | 支持标准 TOTP | 不是主要场景 |
怎么判断你拿到的是哪一种?
最直接的方法是看二维码或配置 URL。标准验证器二维码通常包含一个 otpauth:// URL。如果里面是 otpauth://totp/...,就是 TOTP;如果是 otpauth://hotp/...,就是 HOTP。
如果你看不到原始 URL,也可以观察 App 行为。界面上有倒计时圈、提示 30 秒后刷新、验证码自动变化,通常就是 TOTP。只有在你请求下一个码或每次使用后才变化的,更可能是 HOTP。
还要注意,不是所有二维码都是 TOTP 二维码。有些二维码只是把设备绑定到某个推送登录系统,并不包含可导出的共享密钥。
为什么常见验证器多用 TOTP?
TOTP 更适合普通登录流程。你打开验证器,看到当前验证码,把它输入网站,网站按相同时间窗口校验即可。它不需要记录你离线时点了多少次“生成下一码”。
这让 TOTP 更不容易因为普通误操作出问题。你多打开几次 App,验证码不会因为“打开次数”改变,只会随着时间变化。HOTP 则可能因为计数器推进太多,导致服务端和本地状态不同步。
TOTP 的弱点也很明确:它依赖时间。如果手机、电脑或浏览器环境时间不准,即使密钥完全正确,也可能生成错误验证码。
BaseToolbox 适合什么场景?
当你有 Base32 secret、otpauth:// URL 或标准 TOTP 二维码图片时,可以用2FA 验证码生成器快速检查。页面会在浏览器本地解析 issuer、account、周期、位数和算法。
但不要把重要个人账号的 2FA 密钥随便贴到陌生网站。BaseToolbox 是本地浏览器处理,不上传密钥;即便如此,更推荐用于测试、恢复校验、内部工具、开发调试,或你明确需要浏览器侧 TOTP 生成器的场景。
团队里也可以把它当作排查工具使用。例如后端接入 TOTP 校验后,测试人员可以用一组专门的测试 secret 验证周期、位数和算法是否和服务端一致;客服或运维在排查“验证码一直不对”时,也可以先判断用户提供的是 TOTP、HOTP、备用码,还是完全不同的登录二维码。
如果账号使用的是短信、Passkey、推送批准或厂商自定义登录流程,TOTP 生成器就不一定适用。
常见配置错误
不要把备用码当成 TOTP。备用码通常是服务网站提前生成的一组固定恢复码;TOTP 是从共享密钥和时间反复计算出来的验证码。
不要只保存二维码截图而不确认格式。截图如果丢失、损坏或不是 otpauth:// 二维码,后续可能无法导入。
不要忽略时间同步。如果同一个 secret 在一台设备上能用,另一台设备不能用,先检查系统时间和自动同步,再考虑重置 2FA。
常见问题
Google Authenticator 是 TOTP 还是 HOTP?
大多数常见账号配置是 TOTP。二维码里通常包含 otpauth://totp/...。
没有手机还能生成 TOTP 吗?
如果你有原始 Base32 secret 或 otpauth:// URL,就可以生成。要谨慎保管,因为任何拿到 secret 的人都能生成验证码。
新系统应该用 HOTP 吗?
普通验证器 App 登录通常优先用 TOTP。HOTP 仍有使用场景,但需要明确管理计数器同步。