← 返回工具箱

SECURITY / RFC 6238

TOTP 验证码 / URI 调试工具

生成动态验证码、复现指定时刻、验证相邻时间窗口,并导入或导出 Google Authenticator 等认证器使用的 otpauth 配置。

不要粘贴正在使用的 2FA 密钥。页面不会上传输入,但真实 Secret、二维码和 otpauth URI 都能生成账号验证码。请使用测试账号或一次性测试密钥,完成后清理截图与剪贴板。

AUTHENTICATOR CONFIG

认证器配置

10 字节 · 80 bit

导入 otpauth URI

只支持 otpauth://totp;标签与 issuer 参数冲突时会拒绝导入。

固定参考时刻(可选)

留空使用设备当前时间;填 Unix 秒可复现日志或 RFC 测试向量。

时间必须同步

TOTP 由 Secret 和时间周期共同决定。服务端与设备时钟偏差过大时,正确 Secret 也会失败;优先修复时钟,而不是无限扩大窗口。

URI 就是凭证

otpauth URI 和二维码都包含 Secret。它们适合初始化认证器,不应长期放在日志、分析事件、公开图片或支持工单中。

窗口不是重试次数

前后 1 个周期意味着最多检查 3 个候选值。正式登录还必须限制尝试次数、防重放并记录异常,而不是对更多窗口暴力匹配。

RELATED TOOLS

查看全部工具 →

USE & REVIEW

TOTP 验证码 / URI 工具常见问题

查看全部工具指南 →

Secret 正确,TOTP 验证码为什么仍然不一致?

先检查服务端和手机时间。TOTP 通常每 30 秒把当前 Unix 时间换成一个 Counter,再结合 Secret 计算验证码;设备相差一个周期就会得到不同结果。还要核对 Base32 Secret、算法、位数和周期,不能只看账号名称相同。

验证窗口设为前后 1 个周期是什么意思?

它会依次检查前一个、当前和后一个 Counter,共最多三个候选验证码,用来容忍很小的时钟偏差。窗口越大,单次猜中的概率也越高。生产登录应优先同步时钟,并配合尝试次数限制、防重放和异常记录,而不是无限扩大窗口。

otpauth URI 和二维码可以公开吗?

不可以。URI 的 secret 参数就是 TOTP 共享密钥,二维码只是它的图形表示。任何拿到它的人都能在自己的认证器里生成同样的验证码。它们只应在初始化或安全恢复流程中短暂展示,不能写进日志、分析事件、公开截图或客服工单。

Issuer 和 Account 标签会参与验证码计算吗?

不会,验证码核心由 Secret、Counter、算法和位数决定。Issuer 与 Account 用来让认证器显示“哪个服务、哪个账号”。不过 URI 标签中的 Issuer 和 issuer 查询参数应保持一致,否则不同认证器可能显示混乱;本页遇到冲突会拒绝导入。

SHA1、SHA256 和 SHA512 应该选哪个?

选择必须与服务端配置一致,算法不同就会生成不同验证码。SHA1 是 TOTP 生态中兼容性最好的常见默认值;SHA256 和 SHA512 需要确认目标认证器与服务端都支持。不要因为名称看起来更强就单方面切换,否则现有账号会全部验证失败。

这个工具能代替正式的 MFA 服务端实现吗?

不能。它适合生成测试向量、检查 URI 和排查时钟偏差,不负责安全保存 Secret、绑定用户、恢复码、限速、验证码防重放、审计或账号恢复。所有计算都在浏览器本地完成,但真实生产 Secret 仍不应粘贴进普通网页。