OTP

2FA TOTP 验证码生成器

生成并校验 2FA 六位动态验证码

密码安全
🔒 100% 本地运行 — 你的数据不会离开当前页面
由 ToolsKit 编辑团队维护最近更新:2026年6月9日最近复核:2026年6月9日
页面模式
Input

Quick CTA

先填 Base32 Secret 或 otpauth URI,首屏直接生成当前 TOTP;参数说明放在 Deep。

Output
Current Code
Next Code
Time Remaining0s
Time Step0
🔒 100% client-side • HMAC-SHA1 (RFC 6238)
页面阅读模式

Deep 展开踩坑、配方、片段、FAQ 与相关工具,适合排查问题或继续深入。

工具说明

用于生成并校验 Google Authenticator 兼容的 2FA TOTP 动态验证码。输入 Base32 Secret 或 otpauth URI 后,可生成当前验证码和下一窗口验证码,显示剩余秒数,并可粘贴手机验证器上的六位/八位验证码做匹配检查。适合排查登录双重验证、验证后端 OTP 实现、检查二维码绑定参数。所有 HMAC 计算都在浏览器本地执行。

失败输入样例库

Secret 复制时带空格,Base32 未清洗

失败输入:把文档里的 `JBSW Y3DP EHPK 3PXP` 原样粘贴,包含空格与格式噪声。

失败表现:生成验证码与认证器不一致,团队误以为后端验签逻辑有问题。

修复:先把 secret 归一化为干净 Base32(去隐藏空白),再做验证码对比。

排查 MFA 时忽略时钟偏移

失败输入:客户端本机时间未同步,却直接与线上 NTP 同步服务对比验证码。

失败表现:正确 secret 也会表现为“验证码总是错”,误导排障方向。

修复:先校准客户端与服务端时间,再按当前/相邻时间窗验证。

时钟漂移导致持续校验失败

失败输入:客户端与服务端时间偏差超过一个时间步长。

失败表现:用户输入看似正确验证码却反复失败。

修复:允许小范围容差并持续监控 NTP 健康。

明文存储 TOTP 密钥

失败输入:数据库直接保存原始密钥。

失败表现:一旦泄露可被批量伪造动态码。

修复:密钥静态加密并限制解密链路。

无限次验证码重试

失败输入:校验接口无频率限制。

失败表现:暴力尝试成功概率上升。

修复:增加账号与 IP 双维度限流和锁定策略。

快速决策矩阵

联调真实 MFA 失败链路(前端 + 后端)

建议选:明确 secret、period、digits 并结合日志时间戳做窗口比对。

谨慎用:不要在默认参数不明确、时间未校准的情况下下结论。

设计生产环境 2FA 开通流程

建议选:优先 `otpauth://` + 二维码引导,原始 secret 仅用于受控恢复场景。

谨慎用:避免把原始 secret 暴露在常规流程里,降低截图与剪贴板泄露风险。

将 TOTP 升级为强制二次验证

建议选:密钥分发、时间同步与恢复机制一起设计。

谨慎用:避免无时钟漂移兜底就直接强制开启。

真实用户账号安全体系

建议选:独立密钥 + 加密存储 + 限流校验。

谨慎用:避免共享密钥和无限重试。

短期隔离演示环境

建议选:可简化配置但需明确一次性范围。

谨慎用:避免把演示捷径带入生产认证。

生产可用片段

otpauth 样例

txt

otpauth://totp/ToolsKit:demo@example.com?secret=JBSWY3DPEHPK3PXP&issuer=ToolsKit&period=30&digits=6

对比决策

当前验证码 vs 下一窗口验证码

当前验证码

适合验证现在应该通过的验证码。

下一窗口验证码

适合排查用户正好卡在 30 秒切换边界,而接收方允许轻微时间窗口的情况。

补充:同时看到两个窗口,会让时间边界问题更容易解释,但不代表线上策略应该无限放宽。

原始 Secret vs otpauth URI

原始 Secret

适合 secret 已经单独拿到,只需要生成验证码。

otpauth URI

适合完整传递 TOTP 配置,包括 issuer、位数和周期。

补充:secret 足够生成验证码,但 URI 带着很多人排障时会漏看的上下文。

单 App 校验 vs 多 App 互通校验

多 App 互通校验

适合面向外部用户的 MFA 流程。

单 App 校验

仅适合内部原型。

补充:互通验证可显著降低上线后兼容工单。

用户独立 TOTP 密钥 vs 团队共享密钥

独立密钥

适合所有真实身份认证系统。

共享密钥

仅适合受控临时实验设备。

补充:共享密钥会失去个人追责与单点撤销能力。

高频问题直答

Q01

它能生成并校验 2FA TOTP 验证码吗?

可以。粘贴 Base32 Secret 或 otpauth URI 后,可以生成当前和下一窗口验证码,也可以输入手机认证器上的验证码做匹配检查。

Q02

能检查 Google Authenticator 这类设置链接吗?

可以。otpauth://totp 链接会被拆出 secret、位数、周期等关键参数,方便确认配置是否一致。

Q03

为什么生成的验证码这么快就过期?

因为 TOTP 验证码按时间窗口轮换。常见 2FA 应用通常每 30 秒换一次,用来降低重放风险。

失败门诊(高频踩坑)

系统时间不准还在测 TOTP

原因:TOTP 强依赖时间同步,时钟漂移会让正确 secret 看起来像坏的。

修复:先确认设备和系统时间同步,再判断验证码是否异常。

把六位码和八位码配置混在一起

原因:大多数消费级 2FA 是六位码,但一些内部系统会用八位码。

修复:先按 otpauth URI 或后端策略确认 digits,再做验证码校验。

复制 secret 时混进空格或非法字符

原因:Base32 Secret 从截图、文档或二维码解析结果里复制时很容易带入格式问题。

修复:先去掉格式空格并确认字符合法,再判断认证器应用是否有问题。

场景配方

01

验证一份 TOTP / 2FA 配置

目标:根据 Base32 Secret 或 otpauth URI 生成并校验当前验证码,先判断问题是否真的在登录系统。

  1. 粘贴 2FA 设置流程里的 Base32 Secret 或完整 otpauth URI。
  2. 确认验证码位数和周期与认证器应用、后端配置一致。
  3. 生成当前和下一窗口验证码,再把手机认证器里的验证码输入校验框。

结果:你可以更快判断问题是 secret、时间窗口、位数、复制错误,还是系统时间漂移。

02

检查 Google Authenticator 迁移或测试账号

目标:在写文档、QA 测试或预发登录前,确认复制出来的 secret 仍然能生成同一组六位验证码。

  1. 把复制出的 secret 或 setup URI 粘贴到生成器里。
  2. 在同一个时间窗口内,对比工具生成的当前验证码和手机应用验证码。
  3. 如果不一致,先检查空格、Base32 字符、位数、周期和设备时间,再去改后端代码。

结果:你能避免把一个字符复制错、周期不一致或时钟不同步的问题误判成认证系统故障。

03

多认证器 TOTP 入网冒烟测试

目标:确保种子在主流认证器上生成一致 OTP。

  1. 生成测试种子并导入多个认证器。
  2. 在统一时钟下按间隔比对 OTP。
  3. 记录偏差并补充入网指引。

结果:上线前暴露兼容问题,降低客服压力。

04

TOTP 上线前 2FA 兼容验证

目标:确认不同认证器应用生成一致一次性口令。

  1. 核对密钥编码与 issuer/account 标签格式。
  2. 验证 30 秒窗口下的设备与服务端时钟一致性。
  3. 准备时钟漂移或设备丢失时的恢复路径。

结果:2FA 启用流程跨设备更稳定、可预期。

05

MFA 开通上线流程

目标:让 TOTP 开通可用、可恢复、可支持。

  1. 每个账号生成独立密钥并提供二维码。
  2. 至少一次校验成功后再正式启用。
  3. 发放恢复码并加密保存密钥元信息。

结果:MFA 上线后更安全也更易运维。

06

设备时钟漂移支持策略

目标:降低因时间偏差造成的误失败。

  1. 记录校验窗口和失败原因。
  2. 在限流前提下允许窄范围相邻时间步。
  3. 连续漂移时提示用户校准设备时间。

结果:登录体验改善且安全边界可控。

实操指南

2FA TOTP 验证码生成器 更适合放在真实输入与发布决策链路中使用,优先关注「联调真实 MFA 失败链路(前端 + 后端)」这类高风险场景。

适用场景

  • 当场景是 联调真实 MFA 失败链路(前端 + 后端) 时,可优先采用:明确 secret、period、digits 并结合日志时间戳做窗口比对。。
  • 当场景是 设计生产环境 2FA 开通流程 时,可优先采用:优先 `otpauth://` + 二维码引导,原始 secret 仅用于受控恢复场景。。
  • 在 当前验证码 vs 下一窗口验证码 场景下先对比 当前验证码 与 下一窗口验证码 再落实现。

快速步骤

  1. 粘贴 2FA 设置流程里的 Base32 Secret 或完整 otpauth URI。
  2. 确认验证码位数和周期与认证器应用、后端配置一致。
  3. 生成当前和下一窗口验证码,再把手机认证器里的验证码输入校验框。

避免踩坑

  • 常见失败:生成验证码与认证器不一致,团队误以为后端验签逻辑有问题。
  • 常见失败:正确 secret 也会表现为"验证码总是错",误导排障方向。

常见问题

可以校验手机验证器上的 2FA 验证码吗?

可以。把六位或八位验证码粘贴到校验框,工具会判断是否匹配当前窗口或下一窗口。

可以直接粘贴 otpauth URI 吗?

可以。工具会解析 otpauth:// URI 里的 secret、digits 和 period,适合检查二维码绑定参数。

兼容 Google Authenticator 吗?

兼容。只要 Secret、位数、周期和系统时间一致,结果应与常见 TOTP 验证器一致。

为什么和手机验证器的结果不一致?

通常是 Secret、位数、周期或设备时间不同步导致,尤其要先检查系统时间是否准确。

验证码会自动刷新吗?

会,页面会根据倒计时更新当前码和下一码。

Secret 会上传到服务器吗?

不会。Secret 解析、HMAC 计算和验证码校验都在浏览器本地完成。

继续浏览