# TOTP / HOTP 离线动态密码生成器

从 base32 共享密钥生成 RFC 6238 TOTP（基于时间，6/8 位、30/60 秒步长）与 RFC 4226 HOTP（基于计数器）一次性密码，完全离线，支持 HMAC-SHA1/256/512，并导出 otpauth:// URI 以便导入 Google Authenticator / Authy

> 标准页面: https://elysiatools.com/zh/tools/totp-hotp-offline-generator

- **分类:** Security

- **关键词:** totp, hotp, 一次性密码, 2fa, 双因素认证

## 概述

输入 base32 共享密钥（即 Google Authenticator / Authy 二维码旁显示的那串字符），工具会在本地计算一次性密码——不会向任何服务器发送数据。

支持：
- **TOTP**（RFC 6238）：基于当前 UNIX 时间与步长（30 秒/60 秒）生成。这是 Google Authenticator 中大多数 2FA 账户显示的码。
- **HOTP**（RFC 4226）：基于共享计数器生成。
- HMAC 算法：**SHA-1**（RFC 默认，几乎所有验证器都使用）、**SHA-256**、**SHA-512**。
- 6 位（默认）或 8 位输出。
- “显示后续 N 个码”——预览接下来若干个 TOTP 时间窗或 HOTP 计数器，便于测试漂移。
- 导出 **otpauth://** URI（可带 issuer 与账户标签），以便重新导入任意验证器 App。

实现说明：
- HOTP 使用标准动态截断算法：对 8 字节大端计数器做 HMAC，取最后一字节低 4 位作为偏移，读取 31 位整数，再对 10^digits 取模。
- TOTP 即 counter = floor(unixTime / step) 的 HOTP。
- 密钥解码为 RFC 4648 base32（无需填充），会自动忽略空格。

适用场景：验证 2FA 密钥与手机生成的码一致、在登录流程中接入 TOTP 校验、教学 HMAC-OTP，或通过 otpauth:// 把 2FA 账户迁移到新设备。

## 输入项

- **共享密钥 (base32)** (text): JBSWY3DPEHPK3PXP (A–Z, 2–7; spaces ignored)
- **模式** (select)
- **HMAC 算法** (select)
- **位数** (select)
- **时间步长（秒）** (select)
- **计数器 (HOTP)** (number): e.g. 0
- **显示后续 N 个码** (number)
- **签发方 (otpauth URI)** (text): e.g. Acme Corp
- **账户标签** (text): e.g. alice@example.com

## 适用场景

- 需要验证手机身份验证器（如 Google Authenticator 或 Authy）生成的 2FA 验证码是否与密钥源头一致时。
- 在开发或测试双因素认证（2FA）登录流程时，需要快速获取当前或后续时间步长的动态验证码。
- 想要将备份的 Base32 密钥重新转换为 otpauth:// 格式的 URI，以便快速扫码迁移到新的验证器设备。

## 工作原理

- 用户输入 Base32 编码的共享密钥，工具在本地将其解码为原始字节流，自动忽略空格等干扰字符。
- 根据选择的模式（TOTP 或 HOTP），工具获取当前的 UNIX 时间戳（计算时间步长）或指定的计数器值作为输入。
- 使用选定的 HMAC 算法（SHA-1/SHA-256/SHA-512）对输入进行哈希计算，并通过标准动态截断算法提取出 6 位或 8 位的数字密码。
- 实时渲染出当前验证码、倒计时进度条、后续多个时间窗的预测码，并拼接生成标准的 otpauth:// URI。

## 使用案例

- 离线备份与恢复：将手头保存的 Base32 文本密钥转换为 otpauth:// 格式，方便重新扫码导入新手机。
- 2FA 接口调试：开发人员在对接双因素认证登录接口时，无需频繁查看手机，直接在网页端获取当前及后续的测试验证码。
- 算法教学与验证：安全研究人员或学生通过调整算法、步长和计数器，直观观察 HMAC-OTP 的动态截断输出结果。

## 常见问题

### 这个工具安全吗？我的密钥会被上传吗？

完全安全。本工具完全在您的浏览器本地运行，所有计算均在离线状态下完成，绝不会向任何服务器发送您的共享密钥。

### 为什么我生成的 TOTP 验证码和手机 App 上的不一致？

请检查您的系统时间是否准确同步，以及 HMAC 算法（默认 SHA-1）、位数（默认 6 位）和步长（默认 30 秒）是否与您的账户配置一致。

### 什么是 otpauth:// URI？

这是一种标准协议格式，用于将 2FA 账户信息（包括密钥、签发方和账户名）打包，方便通过二维码或链接直接导入到 Google Authenticator 等 App 中。

### 支持哪些 HMAC 算法？

支持 RFC 标准定义的 SHA-1、SHA-256 和 SHA-512 算法，能够兼容绝大多数主流的安全认证场景。

### 如何使用 HOTP 模式？

选择 HOTP 模式后，您需要手动指定一个计数器（Counter）数值，工具会基于该计数器生成一次性密码，每次验证成功后计数器需递增。

## 相关工具

- [PKCE Code Verifier 与 Challenge 生成器](https://elysiatools.com/zh/tools/pkce-code-verifier-generator): 生成、校验与验证 OAuth2 / OIDC PKCE（RFC 7636）的 code_verifier 与 S256 code_challenge 配对。三种模式：(1) 从密码学安全随机字节（256/384/512/768 位熵）生成全新的 verifier + challenge；(2) 按 RFC 审计你已有的 verifier——长度（43–128）、字符集 \[A-Za-z0-9-._~\] 与 ≥256 位熵；(3) 通过重算 BASE64URL(SHA256(verifier)) 验证 verifier/challenge 配对。可选构建完整的授权请求 URL 与令牌交换体。补足通用的 nonce-generator（仅输出 verifier+challenge 配对）——增加 RFC 合规审计与配对验证。
- [BIP39 助记词生成器](https://elysiatools.com/zh/tools/mnemonic-bip39-generator): 生成或验证 12 到 24 词的 BIP39 助记词，并显示 entropy 与 PBKDF2-HMAC-SHA512 seed 输出
- [批量条码生成器](https://elysiatools.com/zh/tools/barcode-batch-generator): 从 CSV 或多行文本批量生成 Code 128、EAN-13、UPC-A、ITF-14、QR Code 和 Data Matrix，并导出 PNG ZIP 或 PDF
- [Bcrypt哈希生成器](https://elysiatools.com/zh/tools/bcrypt-generator): 从密码生成bcrypt哈希
- [Geohash编码生成](https://elysiatools.com/zh/tools/geohash-generator): 从经纬度坐标生成Geohash编码
- [HMAC 生成与验证器](https://elysiatools.com/zh/tools/hmac-generator-verifier): 使用 SHA-1/SHA-2/SHA-3/BLAKE2 对消息+共享密钥计算 HMAC 消息认证签名，或对收到的签名做验证（恒定时间比对），并内置 Stripe / Slack / GitHub 的 webhook 预设
- [Markdown 表格生成器](https://elysiatools.com/zh/tools/markdown-table-generator): 从 CSV、JSON 或数组数据生成格式化 Markdown 表格，支持对齐、表头样式、列宽控制和合并提示
- [RSA 加解密](https://elysiatools.com/zh/tools/rsa-encrypt-decrypt): 用 RSA 公钥加密文本，或用匹配的私钥解密密文，使用 OAEP 填充（SHA-1 或 SHA-256）。支持长消息分段。密钥与数据均在本地，不外传。由于 Bleichenbacher 攻击，Node 已禁用 PKCS#1 v1.5 解密，故本工具不提供该选项。

## 示例

- [二维码示例](https://elysiatools.com/zh/samples/qrcode-samples): 用于测试二维码读取和生成工具的示例二维码图像
- [代码注释示例](https://elysiatools.com/zh/samples/code-comment-samples): 用于测试注释移除的各种注释样式代码示例文件
- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [无效变量名代码示例](https://elysiatools.com/zh/samples/code-invalid-variable-names-samples): 展示不同编程语言中无效变量命名约定的示例代码文件

## 相关内容

- [令牌、会话与 2FA 工作流工具](https://elysiatools.com/zh/hubs/token-session-and-2fa-workflows): 把 PKCE 与 nonce 生成、JWT/JWK 检查、HMAC 验签、OTP 与 TOTP 测试，以及适合认证排障的标识符工具聚合到一个真实登录流程专题里。
- [音频编码与格式转换工具](https://elysiatools.com/zh/hubs/audio-convert): 在一个专题里比较音频格式转换、码率调整、采样率转换、编码切换和导出工具，适合交付与归档工作流。
- [图片格式转换与动画导出工具](https://elysiatools.com/zh/hubs/image-convert): 在一个专题里比较 JPG、PNG、GIF、AVIF、WebP、TIFF、ICO、base64 以及动画导出相关的图片格式转换工具。
- [JSON 交换与格式翻译工具](https://elysiatools.com/zh/hubs/json-convert): 在一个专题里比较 JSON 与 CSV、YAML、TOML、GraphQL、XML、Markdown、Excel、BSON、EDN 等结构化格式之间的转换工具。
