标准 RFC 6238 测试向量
本页表格列出 RFC 6238 Appendix B 公开的固定 Unix 时间戳 8 位 TOTP 期望输出。你可以不用真实 2FA 账号,就检查 SHA-1、SHA-256 和 SHA-512 实现是否正确。
本指南把公开的 RFC 6238 TOTP 测试向量和简单演示 secret 放在一起,方便你在使用真实账号设置密钥前,测试 Authenticator 应用、本地 2FA 生成器或 TOTP 代码库。它可以帮助排查 algorithm、digits、period、设备时间和 otpauth 参数不一致的问题。
本页表格列出 RFC 6238 Appendix B 公开的固定 Unix 时间戳 8 位 TOTP 期望输出。你可以不用真实 2FA 账号,就检查 SHA-1、SHA-256 和 SHA-512 实现是否正确。
把你的 TOTP 实现设置为对应 hash 算法的 RFC 测试 secret、8 位验证码和 30 秒周期,然后在每个列出的 Unix 时间戳比较生成值和期望输出。
用于非敏感测试时,可以使用公开 Base32 设置密钥 JBSWY3DPEHPK3PXP,并设置 SHA-1、6 位验证码和 30 秒周期。这个密钥只用于测试行为,不能用于保护真实账号。
对应的 otpauth URI 是 otpauth://totp/2FA%20Test:test-token?secret=JBSWY3DPEHPK3PXP&issuer=2FA%20Test&algorithm=SHA1&digits=6&period=30。设备时间一致时,兼容应用应生成相同的当前验证码。
把演示密钥粘贴到本站本地生成器,再把同一个密钥作为手动设置密钥加入你的 Authenticator 应用。在同一个 30 秒窗口内对比当前 6 位验证码。
检查设备时间、时区、algorithm、digits、period,以及应用中保存的 Base32 secret 是否完全相同。多数不一致来自时间漂移,或复制时漏掉、改错了某个字符。
不要公开或分享真实 2FA 设置密钥。测试真实账号时,优先使用 #secret= fragment 快捷方式,因为 fragment 留在浏览器中,不会随 HTTP 请求发送。
本地 token 测试可以确认 TOTP 计算是否兼容,但不能证明某个账号一定接受该验证码,不能恢复丢失的 2FA,也不能批准推送登录、生成短信、邮箱、Passkey 或恢复码。
这些公开的 RFC 6238 Appendix B 测试向量使用 8 位 TOTP 值,覆盖 SHA-1、SHA-256 和 SHA-512,可用于检查 TOTP 生成器、Authenticator 应用或代码库是否符合标准算法。
| Unix 时间 | UTC 时间 | SHA-1 期望 TOTP | SHA-256 期望 TOTP | SHA-512 期望 TOTP |
|---|---|---|---|---|
59 | 1970-01-01 00:00:59 UTC | 94287082 | 46119246 | 90693936 |
1111111109 | 2005-03-18 01:58:29 UTC | 07081804 | 68084774 | 25091201 |
1111111111 | 2005-03-18 01:58:31 UTC | 14050471 | 67062674 | 99943326 |
1234567890 | 2009-02-13 23:31:30 UTC | 89005924 | 91819424 | 93441116 |
2000000000 | 2033-05-18 03:33:20 UTC | 69279037 | 90698825 | 38618901 |
20000000000 | 2603-10-11 11:33:20 UTC | 65353130 | 77737706 | 47863826 |
TOTP 测试向量是一组已知输入和期望输出,用于验证实现是否正确。RFC 6238 测试向量固定了时间戳、hash 算法、位数和 secret,方便其他实现精确对比。
不可以。演示 secret 是公开的,绝不能用于保护真实账号。它只适合检查两个 TOTP 生成器是否能算出相同验证码。
最常见原因是设备时间偏差、period 不同、digits 不同、algorithm 不同,或复制后的 secret 与原始设置密钥不完全一致。
不能。这个工具专注于粘贴 Base32 设置密钥和 otpauth://totp/ 链接。如果账号只显示二维码,请优先查找该服务是否提供手动设置密钥。
是。TOTP 验证码计算在浏览器本地运行。真实 secret 请避免放在 path 和 query URL 中,建议使用 #secret=YOUR_BASE32_SECRET 这种 fragment 快捷方式。