> totp | authenticator | generator <
根据 Base32 密钥生成基于时间(TOTP)和基于计数器(HOTP)的一次性密码。可用于测试 2FA 配置、排查与验证器应用的验证码差异、创建 otpauth:// URI,全程在浏览器本地完成。
密钥不会离开你的浏览器。不过仍请避免在公用电脑上粘贴真实的生产环境密钥。
OTPAUTH URI
需要用于验证器应用的二维码?把 URI 粘贴到 二维码生成器
带倒计时的实时验证码
粘贴 Base32 密钥即可看到当前和下一个验证码,每个周期自动刷新,并以进度条显示剩余有效时间。
SHA-1、SHA-256、SHA-512
可选 6、7 或 8 位及任意周期。HMAC 通过 Web Crypto API 计算,与 RFC 4226 和 RFC 6238 的测试向量一致。
otpauth URI 生成与导入
为验证器应用创建 otpauth:// URI,或导入已有 URI 自动填充所有字段。不会上传任何数据。
>> 技术细节
一次性密码的工作原理:
HOTP(RFC 4226)计算 HMAC(密钥, 计数器),并将结果截断为 6–8 位数字。TOTP(RFC 6238)是计数器为 Unix 时间除以周期(通常 30 秒)的 HOTP,因此验证码每个周期变化一次,双方无需通信即可得到相同结果。共享密钥通常以 Base32 文本或包含 otpauth:// URI 的二维码形式交换。
示例:
RFC 6238 test vector (SHA-1) secret = GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ time = 59 -> counter = 59 / 30 = 1 code (8 digits) = 94287082
为什么使用此 TOTP 生成器:
- >开发登录功能时测试和调试两步验证
- >查明验证器应用与服务器验证码不一致的原因
- >创建带有正确发行方、算法、位数和周期的 otpauth:// URI
- >通过 Unix 时间输入框核对固定时间点的验证码
>> 常见问题
问:TOTP 是如何工作的?
答:应用与服务器共享一个密钥。双方都用密钥和当前时间步(Unix 时间除以周期,默认 30 秒)计算 HMAC,并截断为 6 位验证码。只要两边时钟一致,得到的验证码就相同。
问:在这里输入密钥安全吗?
答:计算完全在浏览器内通过 Web Crypto API 完成,不会向任何服务器发送数据。但 TOTP 密钥就是你账户的钥匙:请勿在共用或不可信的电脑上粘贴真实的生产密钥,调试时请使用测试账户。
问:为什么我的验证码与验证器应用不一致?
答:最常见的原因是时钟不准(TOTP 需要误差在几秒以内的准确时间)、算法/位数/周期不同,或密钥抄写有误。请确认选择了绝大多数服务使用的 SHA-1、6 位、30 秒。
问:TOTP 和 HOTP 有什么区别?
答:HOTP 使用的计数器只在验证码被使用时才递增,因此验证码在用掉之前一直有效。TOTP 的计数器来自时钟,验证码每个周期自动失效。面向普通用户的 2FA 中,TOTP 要常见得多。
问:什么是 otpauth:// URI?
答:它是启用 2FA 时所扫二维码里的文本,例如 otpauth://totp/Example:user@example.com?secret=...&issuer=Example,包含密钥、发行方、账户,以及可选的算法、位数和周期。粘贴到导入框即可提取密钥。
问:验证器应用支持哪些设置?
答:Google Authenticator 等许多应用会忽略算法、位数和周期参数,始终使用 SHA-1、6 位、30 秒。除非确定应用和服务器支持其他设置,否则请使用这些默认值。
HOTP 计数器达到最大值时会怎样?
计数器使用精确的无符号 64 位整数,范围为 0–18446744073709551615。达到最大值时不显示下一组码,递增按钮禁用,不会回绕。导入 HOTP URI 必须有一个明确的十进制计数器,不接受小数、指数写法或重复参数。