Google 广告位 · 728×90 Banner

Mobile Auth QA

2FA 工具测试台

验证移动端 TOTP / HOTP 实现是否准确 · 所有计算均在本地完成

语言
点击右侧
「生成二维码」

扫码导入后,将 App 显示的验证码输入下方

通用配置

TOTP 实时

------
剩余 --s

HOTP 计数

------

对拍验证

批量回归向量

# Unix UTC TOTP
Google 广告位 · 728×90 Banner
📖 使用说明 & 开发场景指南 展开 ▾

本工具专为需要接入双因素认证(2FA)的开发者设计,覆盖 TOTP(基于时间的一次性密码,RFC 6238)与 HOTP(基于计数器的一次性密码,RFC 4226)两种协议。 所有计算在本地浏览器完成,Secret 不会离开你的设备。

01通用配置

所有板块共用同一套参数,修改此处后全页实时生效。

Secret (Base32) 共享密钥,服务端与客户端都持有的种子值,必须为合法 Base32 字符串(A–Z、2–7)。点击 ↺ 可生成随机 Secret。
位数 生成验证码的长度,常见值为 6(主流)或 8(银行/企业场景更高安全性)。
周期(s) TOTP 的时间步长(默认 30 秒)。标准实现为 30s,部分系统使用 60s。必须与服务端保持一致。
算法 HMAC 哈希算法。Google Authenticator 等主流 App 默认 SHA-1;部分高安全场景使用 SHA-256 / SHA-512
适用场景 后端服务接入 2FA 登录(Node.js / Python / Java / Go 等)、移动 App 开发时验证参数配置是否与三方库默认值对齐。

02扫码导入配置 & 手机 App 校验

填写账户名称与颁发者后点击「生成二维码」,将生成符合 otpauth:// 规范的 URI 并渲染为二维码。 用 Google Authenticator、Authy、Microsoft Authenticator 等 App 扫码,导入后将 App 上显示的验证码输入「手机 App 校验」区域进行比对。

账户名称 otpauth URI 中的 label 字段,App 将其显示为条目标题(如邮箱地址)。点击 ↺ 可随机填写。
颁发者 otpauth URI 中的 issuer 参数,App 将其显示为副标题(如应用名)。
手机 App 校验 输入 App 上实时显示的验证码并点击「校验」,工具会与本地计算结果对拍,验证你的配置(Secret、位数、周期、算法)是否与 App 端一致。
适用场景 开发注册/登录流程时,快速验证服务端生成的 otpauth URI 格式是否正确;调试用户反馈「无法扫码」或「验证码始终不对」时的参数排查。
操作步骤
  1. 在「通用配置」中填好 Secret、位数、周期和算法
  2. 填写账户名称与颁发者,点击「生成二维码」
  3. 用手机 2FA App 扫描二维码完成导入
  4. 将 App 上显示的 6/8 位验证码填入「手机 App 校验」框,点击「校验」
  5. 若显示 ✓ 一致,说明参数完全正确;若不一致,优先排查算法和周期是否匹配

03TOTP 实时

基于当前系统时间(+ 偏移量)实时计算并显示 TOTP 验证码,每秒刷新倒计时进度条。 验证码在周期末尾闪烁提示即将更换。

时间偏移(s) 模拟客户端与服务端的时钟偏差(单位:秒)。例如填 +30 表示用「未来 30 秒」的时间计算 OTP,用于测试服务端的时间容差窗口。
刷新 强制立即重新计算当前验证码(正常情况下自动刷新)。
一键偏移测试 自动枚举 −2 ~ +2 个周期的全部偏移量,输出每个偏移对应的验证码,方便批量复制到服务端接口测试宽容窗口边界。
适用场景 开发 TOTP 验证接口时确认「时间窗口容差」(allowedClockDrift)是否覆盖真实用户的时钟误差; 移动端 App 开发时对比本地生成与服务端验证结果;排查「偶发验证失败」(时钟漂移导致)。
典型用法:验证服务端时间容差
  1. 在「时间偏移」中依次填入 -60-300+30+60,记录各偏移下的验证码
  2. 将这些验证码逐一提交服务端验证接口
  3. 确认服务端设置的 window 参数(通常 ±1 步,即 ±30s)能正确接受或拒绝边界值
  4. 或直接点击「一键偏移测试」一次性获取所有偏移验证码

04HOTP 计数

基于计数器(Counter)生成 HOTP 验证码。每次点击「+1 生成」计数器自增并重新计算,模拟硬件令牌或无网络场景的 OTP 流。

Counter 8 字节无符号整数,服务端与客户端必须严格同步。点击 ↺ 重置为 0。
生成 用当前 Counter 值计算 HOTP,不改变计数器。
+1 生成 Counter 自增 1 后再计算,模拟用户按下硬件令牌按键。
适用场景 开发离线硬件令牌支持(U2F Lite、银行动态口令卡); 实现邮件 / 短信 OTP 验证时测试单次有效码逻辑; 调试 HOTP 计数器同步失败(Look-Ahead Window)问题。
典型用法:调试计数器同步
  1. 将 Counter 设为服务端数据库中记录的当前值
  2. 连续点击「+1 生成」若干次,模拟用户多次操作但未及时提交
  3. 将生成的验证码依次提交服务端,验证 Look-Ahead 窗口(通常允许跳跃 ≤ 10 步)是否正常工作

05对拍验证

给定任意一个验证码,判断它在当前参数下是否有效。支持 TOTP(带时间窗口)和 HOTP(带 Look-Ahead 窗口)两种模式。

TOTP 窗口(步) 向前/向后各容许多少个周期。设为 1 表示接受 −30s ~ +30s 范围内生成的验证码,对应 pyotp / speakeasy 等库的默认配置。
HOTP Counter 验证 HOTP 时的起始 Counter,向后最多检查 窗口 步。
待验证码 粘贴从任意来源拿到的验证码,点击「执行验证」即得结论。
适用场景 单元测试 2FA 验证逻辑时作为预期值来源; 后端接口联调时快速判断前端传来的验证码是否本身正确(排除接口 Bug 与验证码本身 Bug); 复现用户反馈的「特定验证码无法通过」问题。

06批量回归向量

在指定时间范围内,按固定步长生成每个时间点对应的 TOTP 验证码,输出为可视化表格并支持导出为 JSON,用于自动化测试的期望值文件。

起始 / 结束 Unix(s) Unix 时间戳(秒级),点击起始值旁的 ↺ 快速重置为「当前时间 / 当前时间 + 5 分钟」。
步长(秒) 采样间隔,通常设为与 TOTP 周期一致(30s),也可设为更小值以测试同一周期内的多个时间点。
复制 JSON 将向量表复制为 JSON 数组,每项包含 unixutctotp 字段,可直接粘贴到测试框架的 fixture 文件中。
适用场景 编写 TOTP 验证函数的单元测试 / 集成测试(Jest、pytest、JUnit 等),生成「固定时间 → 固定验证码」的黄金标准向量文件; CI/CD 回归测试中验证算法实现未被改动; 跨语言实现对比(如同一 Secret 在 Go / Java / Node.js 各实现中结果是否一致)。
典型用法:生成测试 Fixture
  1. 填入 Secret 及参数,设置一段历史时间区间(如某次 Bug 发生时的时间段)
  2. 点击「生成」得到该时段所有验证码
  3. 点击「复制 JSON」,粘贴到测试文件,作为断言预期值
  4. 在测试代码中循环遍历每一项,用相同 Secret + unix 时间戳调用待测函数,断言输出与 JSON 中的 totp 一致

FAQ常见问题排查

验证码始终不对 优先检查:① Secret 是否一致(大小写、空格);② 算法是否匹配(默认 SHA-1);③ 位数是否对齐(6 vs 8);④ 周期是否一致(30s vs 60s)。
偶发验证失败 通常为时钟偏差。使用「TOTP 实时」的「一键偏移测试」确认偏差量,并在服务端适当增大 window 值(建议 ≤ 2)。
HOTP 验证失败 计数器不同步是最常见原因。确认服务端记录的 Counter 与此处一致,并测试 Look-Ahead 窗口是否足够大。
App 无法扫码 检查 otpauth URI 格式,账户名和颁发者中不能包含未转义的 :/ 字符;部分 App 对 SHA-256/512 支持有限,建议先用 SHA-1 测试。