跳到主要内容

TOTP 验证码

两步验证动态码

示例:
当前验证码
周期 30s
— — —
有效中剩余 27 秒
算法HMAC-SHA1(RFC 6238)
时间计数器59551843
位数6

密钥仅在浏览器本地参与运算,不会上传或保存。验证码依赖设备时间,若与 App 结果不一致,请先校准系统时钟。请勿在公共设备上输入真实账号的 2FA 密钥。

TOTP 动态验证码原理

TOTP = HMAC-SHA1(密钥, 时间计数器) 截取动态码,时间计数器 = floor(当前秒 / 30)

每 30 秒刷新一次,与验证方时钟对齐即一致

这个工具能做什么

  • 用共享密钥生成当前 6 位动态码
  • 兼容 Google Authenticator 等标准
  • 本地计算,密钥不上传

怎么使用(输入说明)

  1. 输入密钥:填 Base32 编码的共享密钥。
  2. 生成:得到当前 30 秒窗口的 6 位码。

为什么提示密钥无效

密钥需为标准 Base32(字母 A–Z 与 2–7,无空格);含非法字符或长度不对会被拒。动态码依赖设备时间,时差过大也会不匹配。

计算实例

例:密钥 “JBSWY3DPEHPK3PXP” 在某一时刻生成 “123456”,30 秒后变为另一组。

常见问题 FAQ

Q:算出的验证码和 Google Authenticator 一样吗?

A:一样。本工具严格按 RFC 6238 实现:以 30 秒为周期取时间计数器,用 HMAC-SHA1 签名后做动态截断取 6 位数字。只要密钥相同、设备时间准确,结果就与各类身份验证器 App 完全一致。

Q:密钥会被上传或保存吗?

A:不会。密钥仅存在于当前页面的内存中,全部计算由浏览器原生 Web Crypto API 在本地完成,本工具不发送任何网络请求,刷新页面即清空。

Q:为什么提示密钥无效?

A:TOTP 密钥必须是 Base32 编码,只允许 A-Z 与 2-7 这 32 个字符(可含空格与等号填充,会自动忽略)。若你拿到的是二维码,请先扫码取出 secret 参数再粘贴进来。

常见问题

算出的验证码和 Google Authenticator 一样吗?
一样。本工具严格按 RFC 6238 实现:以 30 秒为周期取时间计数器,用 HMAC-SHA1 签名后做动态截断取 6 位数字。只要密钥相同、设备时间准确,结果就与各类身份验证器 App 完全一致。
密钥会被上传或保存吗?
不会。密钥仅存在于当前页面的内存中,全部计算由浏览器原生 Web Crypto API 在本地完成,本工具不发送任何网络请求,刷新页面即清空。
为什么提示密钥无效?
TOTP 密钥必须是 Base32 编码,只允许 A-Z 与 2-7 这 32 个字符(可含空格与等号填充,会自动忽略)。若你拿到的是二维码,请先扫码取出 secret 参数再粘贴进来。