本工具专为需要接入双因素认证(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 格式是否正确;调试用户反馈「无法扫码」或「验证码始终不对」时的参数排查。
操作步骤
- 在「通用配置」中填好 Secret、位数、周期和算法
- 填写账户名称与颁发者,点击「生成二维码」
- 用手机 2FA App 扫描二维码完成导入
- 将 App 上显示的 6/8 位验证码填入「手机 App 校验」框,点击「校验」
- 若显示 ✓ 一致,说明参数完全正确;若不一致,优先排查算法和周期是否匹配
03TOTP 实时
基于当前系统时间(+ 偏移量)实时计算并显示 TOTP 验证码,每秒刷新倒计时进度条。
验证码在周期末尾闪烁提示即将更换。
时间偏移(s)
模拟客户端与服务端的时钟偏差(单位:秒)。例如填 +30 表示用「未来 30 秒」的时间计算 OTP,用于测试服务端的时间容差窗口。
刷新
强制立即重新计算当前验证码(正常情况下自动刷新)。
一键偏移测试
自动枚举 −2 ~ +2 个周期的全部偏移量,输出每个偏移对应的验证码,方便批量复制到服务端接口测试宽容窗口边界。
适用场景
开发 TOTP 验证接口时确认「时间窗口容差」(allowedClockDrift)是否覆盖真实用户的时钟误差;
移动端 App 开发时对比本地生成与服务端验证结果;排查「偶发验证失败」(时钟漂移导致)。
典型用法:验证服务端时间容差
- 在「时间偏移」中依次填入
-60、-30、0、+30、+60,记录各偏移下的验证码
- 将这些验证码逐一提交服务端验证接口
- 确认服务端设置的
window 参数(通常 ±1 步,即 ±30s)能正确接受或拒绝边界值
- 或直接点击「一键偏移测试」一次性获取所有偏移验证码
04HOTP 计数
基于计数器(Counter)生成 HOTP 验证码。每次点击「+1 生成」计数器自增并重新计算,模拟硬件令牌或无网络场景的 OTP 流。
Counter
8 字节无符号整数,服务端与客户端必须严格同步。点击 ↺ 重置为 0。
生成
用当前 Counter 值计算 HOTP,不改变计数器。
+1 生成
Counter 自增 1 后再计算,模拟用户按下硬件令牌按键。
适用场景
开发离线硬件令牌支持(U2F Lite、银行动态口令卡);
实现邮件 / 短信 OTP 验证时测试单次有效码逻辑;
调试 HOTP 计数器同步失败(Look-Ahead Window)问题。
典型用法:调试计数器同步
- 将 Counter 设为服务端数据库中记录的当前值
- 连续点击「+1 生成」若干次,模拟用户多次操作但未及时提交
- 将生成的验证码依次提交服务端,验证 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 数组,每项包含 unix、utc、totp 字段,可直接粘贴到测试框架的 fixture 文件中。
适用场景
编写 TOTP 验证函数的单元测试 / 集成测试(Jest、pytest、JUnit 等),生成「固定时间 → 固定验证码」的黄金标准向量文件;
CI/CD 回归测试中验证算法实现未被改动;
跨语言实现对比(如同一 Secret 在 Go / Java / Node.js 各实现中结果是否一致)。
典型用法:生成测试 Fixture
- 填入 Secret 及参数,设置一段历史时间区间(如某次 Bug 发生时的时间段)
- 点击「生成」得到该时段所有验证码
- 点击「复制 JSON」,粘贴到测试文件,作为断言预期值
- 在测试代码中循环遍历每一项,用相同 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 测试。