OTP Generator (TOTP/HOTP)
TOTP Code
------
30s
技术详情
OTP 一次性密码生成器的工作原理
工具功能
OTP 生成器实现 TOTP(Time-based One-time Password)和 HOTP(HMAC-based One-time Password)算法,生成 6 位或 8 位的一次性密码。TOTP 基于当前时间戳(30 秒为一个时间窗口)计算动态密码,HOTP 基于递增计数器。工具支持配置密钥(Base32 编码的共享密钥)、算法(SHA-1/SHA-256/SHA-512)、数字位数(6/8 位)和时间步长。你可输入 Google Authenticator 等 2FA 应用的密钥验证生成的一致性。
常见开发者使用场景
OTP 在应用安全和双因素认证(2FA)中是核心技术。开发账户系统的 2FA 功能时,需要验证 TOTP 算法的实现是否正确——用这个工具生成测试值。用户报告 2FA 验证码不对时,排查可能的时间同步问题(服务器和手机时间差超过 30 秒)或密钥配置错误。集成第三方 2FA 服务(Authy、Duo)时用于验证底层协议兼容性。安全审计时需要确认 TOTP 窗口期设置(默认 1 个窗口可避免时间偏差导致的拒绝)。
配合 Base32 编码器 解码 2FA 密钥,或使用 HMAC 生成器 理解 TOTP 底层的 HMAC 计算过程。
TOTP 算法原理 RFC 6238
TOTP 的数学公式为 TOTP = HMAC-SHA1(K, T) 取截断值:
- 时间计数 T:T = floor(当前 Unix 时间戳 / 时间步长)。默认时间步长为 30 秒。
- 密钥 K:共享密钥,通常以 Base32 编码的字符串形式提供给用户(如 JBSWY3DPEHPK3PXP)
- HMAC 计算:对密钥和 8 字节的 T(大端序)计算 HMAC-SHA1
- 动态截断(Dynamic Truncation):取 HMAC 结果最后 4 位作为偏移量 Offset,从 Offset 位置截取 4 字节,取后 31 位对 10^digits 取模
常见陷阱与注意事项
- 时间同步:TOTP 依赖服务器和客户端时间一致。NTP 时间同步失败或时间偏差超过 30 秒会导致所有 OTP 码无效。
- 时间窗口宽容:建议服务端验证时接受 ±1 个时间窗口(共 3 个窗口)的 OTP,以容忍轻微的时间偏差。
- 防重放:TOTP 在同一 30 秒窗口内有效,服务端必须记录已使用的 OTP 防止重放攻击。
- 密钥存储:2FA 密钥应加密存储,且生成时应使用密码学安全的随机数生成器。建议在手机端生成本地密钥。
何时使用此工具而非代码
在测试 2FA 实现正确性、调试时间同步问题、或验证密钥配置时使用此工具。生产环境中使用 speakeasy(Node.js)、python-otp 或 pyotp 等经过充分测试的 TOTP 库。