TOTP 动态口令
TOTP 动态口令是网站两步验证(2FA)常用的一次性验证码:网站和你的验证器共享一串 Base32 密钥,双方用「密钥 + 当前时间」按 RFC 6238 各自算出同一个 6 位数字,每 30 秒换一次。本工具就是浏览器里的谷歌验证器:输入密钥、粘贴 otpauth 链接或导入二维码截图即可实时生成两步验证码,也能生成绑定二维码、校验验证码。密钥只在本机内存里计算,不上传、不保存。
支持选择图片、拖入图片,或在页面任意处 Ctrl+V 粘贴截图;图片只在本机识别。
输入密钥后这里每 30 秒显示一个新的验证码
高级参数:算法 / 位数 / 周期 / 时钟校正
本机时间读取中…
绑定二维码与 otpauth 链接
先输入或随机生成一个有效密钥
校验验证码
先在上方输入有效密钥
如何使用TOTP 动态口令
粘贴网站开启两步验证时给的 Base32 密钥,或直接粘贴 otpauth 链接、上传(或 Ctrl+V 粘贴)绑定二维码截图,服务名称、账户名和参数会自动识别。
看当前验证码与剩余秒数,点「复制验证码」去网站粘贴;卡片下方还会提前显示下一个验证码,临近刷新时不用干等。
要同时管理多个账户就点「加入列表」,谷歌验证器「转移账号」导出的迁移二维码可以一次导入多个账户,逐个核对验证码。
验证码对不上时,展开高级参数核对算法、位数、周期,再用「校验验证码」看是否落在相邻时间窗,时钟偏了就用时钟校正调 ±30 秒。
关于TOTP 动态口令的常见问题
- 用在线 TOTP 生成器会泄露两步验证密钥吗?
- 不会上传。本 TOTP 生成器的全部计算(Base32 解码、HMAC、截取验证码、识别二维码)都在你的浏览器内存里完成,密钥不上传、不写入本地存储、也不会出现在网址里,关掉页面就清空;可以按 F12 打开「网络」面板自查。不过密钥等同于你的第二道门锁,请只在自己的电脑上使用,不要在网吧或公用电脑输入。
- TOTP 动态口令和谷歌验证器的验证码一样吗?
- 一样。同一个密钥、同一时刻、同样的算法/位数/周期,按 RFC 6238 算出的 TOTP 动态口令一定相同,这正是两步验证码能在网站和手机之间对上的原因。本工具与标准 TOTP 一致,多数验证器 App 可互通;若对不上,多半是时钟或参数不一致。
- 谷歌验证器导出的迁移二维码怎么导入?
- 在手机 Google Authenticator 里选「转移账号 → 导出账号」,它会生成一张或几张迁移二维码。截图后在本页点「从二维码图片导入」(或直接 Ctrl+V 粘贴截图),账户会一次加入列表,可以逐个核对验证码;多张时逐张导入。这张截图等同于全部密钥,用完请删除。
- 两步验证码总是提示错误怎么办?
- 先确认手机和电脑的时间都设为「自动同步」,两步验证码对时间非常敏感;再核对算法、位数、周期是否与网站给的一致(绝大多数是 SHA1、6 位、30 秒)。然后展开「校验验证码」输入网站认可的码,看它落在上一个还是下一个时间窗,偏了就用时钟校正调 ±30 秒。
- 两步验证码过期几秒后为什么还能登录?
- 因为多数网站校验时会多放行前后相邻的时间窗。RFC 6238 建议服务端最多容忍一个时间步的网络延迟,按默认 30 秒周期算,刚过期的两步验证码在这类网站上最多还能再用一个周期(约 30 秒);但也有网站只认当前窗口,所以剩余秒数很少时最好等下一个码。另外同一个验证码登录成功后,按规范就不能再用第二次。本页「校验验证码」会标出输入的码属于当前、上一个还是下一个时间窗,方便判断网站的容忍范围。
- 手机丢了能用 TOTP 在线工具算验证码吗?
- 前提是你当初保存了密钥、otpauth 链接或绑定二维码截图:把它输入本页就能算出当前验证码登录,登录后记得重新绑定新手机。如果没有保存过,TOTP 在线工具也无法凭空找回密钥,只能用网站给的备用恢复码或走账号申诉。
- 在线 TOTP 生成器会保存我的账户吗?
- 不会保存。本工具不写入任何存储,列表最多同时放 50 个账户,关闭页面即清空。它适合临时取码、换机迁移核对和开发调试;日常请继续用手机验证器 App,想备份密钥可以用文本加密工具加口令后保存。
- 怎么生成 otpauth 二维码测试两步验证?
- 点「随机生成新密钥」,填上服务名称与账户名,展开「绑定二维码与 otpauth 链接」即可得到 otpauth 二维码和链接:用手机验证器扫码,或复制链接写进你的测试代码;再把手机上的码填进「校验验证码」,就能验证自己的两步验证实现是否正确。
- TOTP 生成器支持 HOTP 计数器模式吗?
- 不支持。本 TOTP 生成器只做按时间变化的 TOTP;HOTP 是按使用次数计数的另一种动态口令,导入时会提示跳过。Steam 令牌(5 位字母码)用的是自有格式,也不在支持范围内。
- TOTP 密钥含数字 0 和 1 为什么报错?
- TOTP 密钥通常用 Base32 书写,只含字母 A~Z 和数字 2~7,没有 0、1、8、9。出现 0 多半是字母 O,1 多半是字母 I 或 L,8 多半是字母 B。本工具会指出第几位出错但不自动替换——猜错了会得到一个能出码却永远对不上的密钥,请对照原始二维码或网站页面核对。
TOTP 验证码是怎么算出来的
TOTP 动态口令只用到两样东西:共享密钥和当前的 Unix 时间戳。下表用 RFC 6238 的公开测试密钥(示例)GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ 在 Unix 时间 1111111081 这一刻,演示两步验证码生成的四个步骤,每个数字都由本页同一套算法现算。
| 步骤 | 做什么 | 示例结果 |
|---|---|---|
| ① 算时间步 | ⌊Unix 时间 ÷ 30⌋,同一个 30 秒里结果不变 | 37037036 |
| ② HMAC-SHA1 | 以密钥为钥匙,对 8 字节大端的时间步做 HMAC | 278c02e53610f84c40bd… |
| ③ 动态截断 | 取最后一字节低 4 位作偏移(这里是 4),从那里取 4 字节并去掉最高位 | 907081804 |
| ④ 取余补零 | 对 10⁶ 取余,不足 6 位前面补 0 | 081 804 |
otpauth 链接参数一览
网站的绑定二维码里存的就是一条 otpauth 链接,例如(示例密钥)otpauth://totp/Example:alice%40example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example。本工具粘贴链接或识别二维码后会自动拆出下面这些参数;生成时只在参数非默认时才写进链接。
| 参数 | 含义 | 默认值 | 本工具支持 |
|---|---|---|---|
| secret | Base32 密钥(必填) | — | 大小写、空格、横线、全角字母都能识别 |
| issuer | 服务名称,如 GitHub | 空 | 与标签前缀不一致时以参数为准并提示;不能含冒号 |
| algorithm | HMAC 哈希算法 | SHA1 | SHA1 / SHA256 / SHA512 |
| digits | 验证码位数 | 6 | 6 / 7 / 8 位 |
| period | 刷新周期(秒) | 30 | 1~300 秒的整数 |
两步验证码对不上怎么排查
| 原因 | 怎么判断 | 处理办法 |
|---|---|---|
| 本机时钟偏差 | 「校验验证码」显示匹配上一个或下一个时间窗 | 把系统时间设为自动同步;临时可用时钟校正(最多 ±3600 秒) |
| 算法或位数与网站不一致 | 网站给的 otpauth 链接里带 algorithm / digits 参数 | 展开高级参数改成与网站一致,或直接粘贴原链接 |
| 密钥抄错 O/0、I/1、B/8 | 输入框提示「不是有效字符」 | 对照原始二维码或网站页面核对,Base32 只含 A~Z 和 2~7 |
| 用了迁移前的旧密钥 | 密钥格式正确但永远差得很远 | 网站重新绑定过两步验证后旧密钥就失效了,重新导出或重新绑定 |
| 网站只接受当前窗口 | 刚复制就提示过期 | 剩余不足几秒时等下一个验证码再填 |
常见身份验证器对 TOTP 参数的兼容性
| 验证器 | SHA1 · 6 位 · 30 秒 | SHA256 / SHA512、8 位、60 秒等 |
|---|---|---|
| Google Authenticator(谷歌验证器) | 支持 | 新版多数支持,旧版可能忽略这些参数 |
| Microsoft Authenticator | 支持 | 部分场景可能只按默认参数计算 |
| 其他常见 2FA App | 支持 | 多数支持,导入后建议用「校验验证码」核对一次 |
TOTP 生成器有哪些叫法和用途
它是一个 TOTP 在线工具,也常被叫作二次验证码、动态验证码生成器或 2FA 验证码生成器,英文里常搜 totp generator、2fa code generator。你可以把它当成谷歌验证器在线版(Google Authenticator 在线):输入身份验证器密钥即可生成 TOTP 动态口令;也能做谷歌验证器迁移核对,把导出的迁移二维码逐个展开;开发者可以用它做 TOTP 密钥生成、拼 otpauth 链接、出 otpauth 二维码并校验验证码。想把网址或文字做成普通二维码,请用 二维码生成与识别。