# TOTP 动态验证码生成器 - 2FA 双因素认证密钥与二维码测试

> 在线 TOTP / HOTP 两步验证码生成与校验：输入 Base32 密钥或 otpauth:// 链接，支持 SHA1/256/512、6/8 位、自定义步长，倒计时显示，生成新密钥与二维码。

- 网址: https://qilingtools.com/zh/totp
- 分类: 开发工具 (https://qilingtools.com/zh/dev)
- 标签: [隐私安全](https://qilingtools.com/zh/tags/privacy), [日期时间](https://qilingtools.com/zh/tags/time), [开发](https://qilingtools.com/zh/tags/dev)
- 最后更新: 2026-10-26
- 价格: 免费，无需注册
- 隐私: 在浏览器本地处理，文件不上传服务器

开发两步验证（2FA）功能时，需要一个能随时对照的验证码生成器：粘贴 Base32 密钥，或者直接粘贴 otpauth://totp/… 链接（会自动读取发行方、账户、算法、位数和步长），就能看到当前验证码、倒计时圆环以及上一个和下一个验证码，方便排查服务器与手机时间不同步的问题。算法支持 SHA-1、SHA-256、SHA-512，位数 6～8 位，时间步长可自定义；也支持基于计数器的 HOTP。需要给新账户开通 2FA 时，可以一键生成随机密钥，得到标准的 otpauth:// 链接和二维码，用 Google Authenticator、Microsoft Authenticator、1Password 等 App 扫码即可。还能输入用户提交的验证码，在 ±N 个时间步的容差窗口内校验，并告诉你匹配的是哪一步。计算使用浏览器 WebCrypto 的 HMAC，通过 RFC 6238 与 RFC 4226 的全部测试向量；“使用指定时间”可以直接复现 RFC 里的例子。密钥只在本页内存中，不上传、不保存，但仍不建议在公用电脑上粘贴真实的生产密钥。

## 使用步骤

1. 粘贴 Base32 密钥或 otpauth:// 链接，或点击“生成随机密钥”
2. 按需调整算法、位数、时间步长，查看当前、上一个、下一个验证码
3. 复制 otpauth 链接或扫描二维码，在“验证一个验证码”里测试容差窗口

## 功能特点

- TOTP（RFC 6238）与 HOTP（RFC 4226）
- SHA-1 / SHA-256 / SHA-512，6～8 位，自定义步长
- 解析与生成 otpauth:// 链接（Key URI 格式）
- 倒计时圆环，显示上一个和下一个验证码
- 随机密钥生成与二维码
- ±N 步容差窗口校验并显示偏移
- 指定时间戳复现 RFC 测试向量
- 纯本地计算，不保存任何内容

## 常见问题

### 为什么我算出的验证码和手机 App 上的不一样？

最常见的原因是时间不同步：TOTP 用当前时间除以步长（通常 30 秒）作为计数器，电脑或手机时钟偏差超过一个步长，验证码就会不同，可以对照“上一个 / 下一个”验证码判断偏差方向。其次检查算法和位数：大多数 App 只支持 SHA-1、6 位、30 秒，使用 SHA-256/512 或 8 位时部分 App 会忽略参数。

### otpauth:// 链接的格式是什么？

标准格式是 otpauth://totp/发行方:账户?secret=BASE32密钥&issuer=发行方&algorithm=SHA1&digits=6&period=30。secret 必填，其余可省略（默认 SHA1、6 位、30 秒）；HOTP 把 totp 换成 hotp，并用 counter 参数代替 period。工具生成的链接就是这种格式，二维码里装的也是这串链接。

### 服务器校验时容差窗口应该设多大？

一般设为 ±1 步（前后各 30 秒）即可兼顾时钟误差和用户输入耗时，RFC 6238 也建议不超过一个步长的网络延迟。窗口越大，被暴力猜中的概率越高。另外要记录已经用过的时间步，防止同一个验证码在有效期内被重复使用。

### 在这里粘贴密钥安全吗？

所有计算都在浏览器本地完成，密钥不会发送到任何服务器，也不会写入本地存储，关闭页面即消失。但 TOTP 密钥等同于第二个密码，任何能看到屏幕、截图或剪贴板的人都能生成验证码，所以不要在公用或他人的电脑上处理真实的生产密钥，测试时最好使用新生成的随机密钥。

## 相关工具

- [JSON 格式化](https://qilingtools.com/zh/json): 免费在线 JSON 格式化：一键美化、压缩，实时语法校验并定位到出错行列，支持树形视图折叠、键名排序、转义与去转义、Unicode 转中文、复制下载，数据不上传。
- [Base64 编解码](https://qilingtools.com/zh/base64): 免费在线 Base64 编码解码工具：支持中文 UTF-8、URL 安全变体，文本与 Base64 互转，实时转换，本地处理不上传。
- [URL 编解码](https://qilingtools.com/zh/url-encode): 免费在线 URL 编码解码工具：encodeURIComponent 与 encodeURI 两种模式，处理中文、空格与特殊符号，本地实时转换不上传。
- [JWT 解析](https://qilingtools.com/zh/jwt): 免费在线 JWT 解析工具：解码 JWT 的 Header 与 Payload，展示过期时间、签发时间等，本地解析不上传，保护令牌安全。
- [时间戳转换](https://qilingtools.com/zh/timestamp): 免费在线 Unix 时间戳转换工具：时间戳与日期互转，自动识别秒/毫秒，显示本地时间、UTC、ISO 8601 和相对时间，实时更新。
- [哈希计算](https://qilingtools.com/zh/hash): 免费在线哈希/摘要计算工具：对文本或文件计算 SHA-1、SHA-256、SHA-384、SHA-512，使用浏览器加密接口本地完成，文件不上传。
- [UUID 生成](https://qilingtools.com/zh/uuid): 免费在线 UUID 生成器：使用加密安全随机数批量生成符合 RFC 4122 的 UUID v4，可大写、去连字符、加花括号，一键复制。
- [进制转换](https://qilingtools.com/zh/base-convert): 免费在线进制转换工具：二进制、八进制、十进制、十六进制及任意 2–36 进制互转，支持大整数（BigInt），本地实时计算。
