TOTPHOTP一次性密码2FA验证器

🔑TOTP 和 HOTP 有什么区别?时间型与计数型一次性密码对比

TOTP 每 30 秒变一次,HOTP 用计数器、码被用掉前一直有效。讲清两种一次性密码算法的区别,以及为什么它们都不走短信。

✍️ SmsHub 团队 📅 2026年7月11日

一句话回答: TOTP 和 HOTP 是验证器里那串六位数背后的两种算法。HOTP(基于 HMAC)用一个计数器,每生成一次码就加一,所以一个码在被用掉之前一直有效;TOTP(基于时间)把计数器换成时钟,所以码每 30 秒自动变一次。你用过的验证器 App 几乎都是 TOTP,HOTP 主要还留在硬件令牌里。

基于时间的一次性密码与基于计数器的一次性密码

有没有想过:为什么验证器里的码半分钟就失效,而老式银行密钥器上的数字却能一直等你输完?这就是 TOTP 和 HOTP 的区别。它们同根同源,只在一件事上分道扬镳——是什么在推动计数器。下面讲清这带来的实际差异,以及它和你用短信验证码收到的码有什么关系。

一、同一个密钥,不同的计数器

两种算法都从一个共享密钥出发——一段随机密钥,同时存在你的设备和服务器上。生成码时,把这个密钥和一个「移动的数字」一起过一遍 HMAC 哈希,再截取成六位数。真正的区别只在于这个「移动的数字」从哪来:

  • HOTP事件计数器。每生成一次码就加一。第 47 号码在被用掉之前一直有效,用掉后服务器就等第 48 号。
  • TOTP时间。它把当前时间切成 30 秒一段,用「第几段」当计数器。段一翻过去,码就自己变了。

就这么简单。TOTP 本质上就是把时钟接到了 HOTP 计数器的插槽上。

二、实际差别

因素HOTP(计数器)TOTP(时间)
什么推动码变化一次按键 / 事件时钟,每 30 秒
一个码能用多久直到被用掉约 30 秒
是否要对时不需要需要(设备和服务器)
码被偷后的风险用掉前一直有效很快过期
常见载体硬件令牌验证器 App

TOTP 的「短命」正是它胜出的原因:偷到的码一分钟内基本作废。HOTP 的「一直有效」对时钟漂移更宽容,但泄漏的码会一直躺着等人用。

三、你到底在哪儿会碰到它们

打开 Google Authenticator、Authy,或密码管理器内置的验证码,你用的就是 TOTP——这是如今的默认方案,也正是我们在验证器 App 和短信验证码对比里拿来和短信比的那套机制。HOTP 更多出现在专用硬件里:银行读卡器、老式 RSA 密钥器、部分 FIDO 兜底设备——那些地方没有可信的时钟。

两者都不经过电话网络下发。这正是它和短信验证码最大的不同:短信的码是服务器生成后给你的——所以短信码能用在线号码收,而 TOTP/HOTP 的码不行。

四、如果你用在线号码收码,这意味着什么

TOTP 和 HOTP 都是从存在你设备上的密钥算出来的——网络上没有东西可拦截,因此在线号码也帮不上忙。如果一个服务只提供「验证器 App」这一种方式,那接码服务根本不在这个流程里。

短信验证码正相反:它的密钥是一次性的、会送到某个手机号,所以无 SIM 卡在线收码对它才管用。当网站让你在「验证器 App」和「发短信给我」之间选时,短信那一项才是在线号码能完成的。

常见问题

Q:TOTP 比 HOTP 更安全吗? 多数场景下是的——30 秒过期大幅压缩了偷到的码还能用的时间。HOTP 的好处仅在于不用对时。

Q:为什么验证器的码有时候在切换的瞬间就被拒? 时钟漂移。如果手机时间和服务器差得超过容错窗口,TOTP 码就会失败。打开「自动网络对时」通常就好了。

Q:TOTP 的码能用短信收吗? 不能。TOTP 是本地用密钥算出来的,从不下发。只有短信验证码才会发到手机号。

小结

TOTP 和 HOTP 是同一个算法配了不同的时钟:HOTP 数事件、会一直等,TOTP 数秒、会过期。 两者都是设备本地生成的密钥,都不走电话网络——而下发到号码这件事,始终只有短信验证码在做,也只有它能用在线号码收到。

← 返回博客列表