CodeToolProCodeToolPro
GitHub

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 库。

    How to Use OTP Generator (TOTP/HOTP)

    1. 1Configure your generation settings (length, format, options)
    2. 2Click the Generate button to create new output
    3. 3Review the generated result
    4. 4Copy the output to your clipboard or download it

    Frequently Asked Questions

    • Can I use the generated output in production?

      Yes, all generated values are cryptographically random (where applicable) and ready for production use. No special attribution required.

    • Is OTP Generator (TOTP/HOTP) free?

      Yes, 100% free. No registration, no credit card required. All tools are freely available for developers worldwide.

    • Does this tool upload my data to any server?

      No. All processing runs locally in your browser using client-side JavaScript. Your input data, code, or files never leave your device. We do not store, log, or transmit any user data.