Google Authenticator 导出码解析:从 otpauth-migration 提取密钥的完整指南
更新于 2026-11 · 阅读约 6 分钟
换手机、做备份,或者想把验证器从 Google Authenticator 迁移到 Aegis、2FAS 这类更灵活的应用时,Google 提供的「导出账户」功能会生成一个二维码。这个二维码里装着你所有账户的完整密钥——但它是 Google 私有的 otpauth-migration:// protobuf 格式,普通扫码工具扫出来的只是一串无法直接使用的链接。
这篇指南讲清楚三件事:怎么正确导出、导出码里到底是什么结构、以及如何用 2fa.pub 的在线解析工具在不泄露密钥的前提下把它变成可用的 Base32 密钥。
一、在 Google Authenticator 中导出账户
- 打开 Google Authenticator → 右上角三个点 → 设置(旧版本为「转移账户」)
- 选择「导出账户」
- 勾选要导出的账户(可多选)→ 下一步
- App 生成一个二维码——这就是导出码,包含所选账户的全部密钥
注意:iOS 与 Android 的入口略有差异,但生成的导出格式完全相同。部分银行与企业 SSO 账户被服务商禁用导出,不会出现在导出码里。
二、导出码里到底是什么?
用任意扫码器扫这个二维码,得到的文本形如:
otpauth-migration://offline?data=CiUKIEkR4IknrfoK...(Base64URL 编码)
data 参数是一段 Base64URL 编码的 protobuf 消息,解码后每个账户条目(OtpParameters)包含六个字段:
| 字段号 | 含义 | 示例 |
|---|---|---|
| 1 | secret(密钥原始字节) | 二进制 16-20 字节 |
| 2 | name(账户名) | [email protected] |
| 3 | issuer(发行方) | GitHub |
| 4 | algorithm(算法枚举) | 1 = SHA1,2 = SHA256,3 = SHA512 |
| 5 | digits(位数枚举) | 1 = 6 位,2 = 8 位 |
| 6 | type(类型枚举) | 2 = TOTP,1 = HOTP |
把 secret 字节做标准 Base32 编码(RFC 4648,字母表 A-Z2-7),就是我们在其他验证器里熟悉的密钥形式,例如 JBSWY3DPEHPK3PXP。
三、用 2fa.pub 在线提取(本地计算,密钥零外发)
- 打开 2fa.pub 的 Google 导出码解析工具
- 把
otpauth-migration://offline?data=...整串粘贴进输入框,或直接上传导出二维码截图(Ctrl+V 粘贴截图也行) - 表格立即列出每个账户的发行方、账户名、Base32 密钥与算法参数
- 点「发送到主计算器」即可实时算出全部验证码,或用内置二维码生成器把密钥转回标准 otpauth:// 二维码供其他 App 扫描
整个解码过程在你的浏览器里完成——2fa.pub 是纯前端工具,没有后端接口接收密钥,页面的实时网络审计功能可以直接验证这一点。你也可以用我们生成的 2FA 二维码生成器把密钥转成手机可扫的 otpauth:// 图。
四、常见问题
导出码安全吗?导出码 = 全部密钥的明文,等同于把所有密码写在一张纸上。不要截图发群里、不要用不可信的在线工具解析。2fa.pub 的解析全部在浏览器本地进行,这也是它与其他在线解析工具的根本区别。
能导入其他验证器吗?能。拿到 Base32 密钥后,任何支持 otpauth:// 标准的验证器都可以重建条目。
Steam 呢?Steam 用自己的 Steam Guard 协议(shared_secret / maFile),不走这套导出。2fa.pub 的 Steam 计算器支持直接粘贴 maFile 计算 5 位令牌。