TOTP 验证码生成器
Base32 密钥生成 6/8 位动态验证码,密钥与验证码只在浏览器本地计算。
密钥来自验证器或服务商后台;也可从 otpauth:// 链接里 secret= 后面取。
------
30 秒
验证码依赖本机时间,请确保系统时间已自动同步。本工具按 RFC 6238 使用 HMAC-SHA1。
使用说明
把验证器里的 Base32 密钥变成当前可用的 6 位或 8 位动态验证码,并显示剩余有效秒数,用于登录两步验证;密钥与计算全部留在浏览器本地。
- 从验证器、服务商后台或 otpauth:// 二维码链接(secret= 后面那段)复制 Base32 密钥,粘贴到输入框。
- 密钥里的空格、小写字母与末尾的 = 填充可以原样粘贴,工具会自动转成大写并去掉空白与填充。
- 选择验证码位数(6 位或 8 位)与刷新周期(30 秒或 60 秒);绝大多数服务使用 6 位 / 30 秒,保持默认即可。
- 页面上会显示当前验证码、剩余秒数与进度环;倒计时归零后验证码自动刷新,点「复制验证码」粘贴到登录框。
- 需要导入验证器时,填写服务名与账号,复制下方 otpauth:// 链接,在验证器里选择「从链接添加」或扫码导入。
常见问题
- 验证码和服务端对不上怎么办?
- 先检查本机时间是否开启了自动同步,TOTP 完全依赖时间,偏差超过一个周期就会失效;再核对验证码位数、周期与密钥是否抄错。若服务端使用 HMAC-SHA256 或 SHA-512,本工具(SHA-1)算出的码不会匹配,需要改用支持对应算法的验证器。
- 密钥里有空格和等号也能用吗?
- 可以。Base32 规范允许按组加空格,末尾的 = 只是补位符,工具会统一去掉空白与 = 再转成大写解码。但从二维码链接复制时要注意别把 secret= 前面的参数名一起粘进来,只取等号后面的密钥部分。
- 提示 Base32 密钥不合法是什么原因?
- Base32 只使用 A–Z 与数字 2–7,出现 0、1、8、9 或符号通常说明抄错了字符;也可能是复制时被截断,导致长度不符合 Base32 的分组规则。重新从原始密钥复制一次,或让服务端重新生成密钥再试。
- 密钥会被保存或上传吗?
- 不会。密钥只在当前页面内存中用于计算 HMAC,输入、验证码与 otpauth 链接都不会发送到服务器,也不会写入本地存储;刷新或关闭页面后即失效。长期密钥建议只保存在可信的验证器或密码管理器中。