news 2026/9/11 3:47:23

从 Authy 迁移到 Ente Authenticator:四种导出方案与导入实操完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从 Authy 迁移到 Ente Authenticator:四种导出方案与导入实操完全指南

从 Authy 迁移到 Ente Authenticator:四种导出方案与导入实操完全指南

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

本文基于 ente 仓库中的 Authy 迁移指南 整理扩充。Authy 已停止支持其桌面应用,无法再从 App 内直接导出 2FA 验证码,本文覆盖当前仍可用的四种导出路径(终端导出工具、社区脚本、root 安卓设备、iOS 中间人抓包),并结合 ente 移动端源码 逐条讲解如何将导出的明文/JSON 文件安全导入 Ente Authenticator。

从 Authy 迁移到新的一次性密码(2FA)验证器,最麻烦的一点在于 Authy 客户端本身不提供“导出全部验证码”的功能——这意味着如果你不借助外部手段,就不得不为每一个账户重新配置 2FA。不过,社区已经有多种成熟方案可以从 Authy 中导出你的 TOTP 密钥,再批量导入 Ente Authenticator。本文按操作难度从低到高,介绍四种常用方法,并给出对应的 Ente 侧导入步骤,以及迁移完成后的安全清理建议。

[!CAUTION]

安全警告(务必先读)

  • 无论使用哪种方法,导出的 JSON 与 TXT 文件都包含你所有账户的未加密 TOTP 密钥严禁在任何渠道分享这些文件!
  • 这些方法不保证能导出你 Authy 账户中的全部验证码。在确认所有账户都成功导入 Ente Authenticator 之前,不要删除 Authy 中的任何验证码
  • 迁移完成后,建议删除本地生成的明文 JSON/TXT 导出文件(见文末“迁移后的安全清理”)。

背景:为什么 Authy 无法直接导出,以及现阶段的方案格局

Authy 长期以来只允许用户在应用内逐条查看验证码,并不提供批量导出明文 TOTP 密钥的入口。以前社区有两种广为人知的导出方式(基于 Authy 桌面客户端数据),但Authy 已停止维护桌面应用,这两种方式现已失效:

[!WARNING]

Authy 已放弃对其桌面应用的全部支持。本文的方法 1、方法 2 已无法再用于导出数据。当前可用的路径是:

  • 方法 3:拥有一台root 过的安卓手机(Android 6 及以上,且通过 Play Integrity 校验);
  • 方法 4:拥有一台iOS 设备与一台电脑(配合抓包/中间人解密流程)。

也就是说,现在的选择本质上是:root 安卓手机iOS 设备 + 电脑二选一。下面两种方法分别面向这两类环境,你可以按自己的设备条件挑选。

方法 1:使用 Neeraj 的 Authy 导出工具(自动化程度最高)

适用人群:希望跳过繁琐技术步骤、直接进入导入环节的普通用户。

社区开发者 ua741 维护了一个开源的authy-export命令行工具,可以自动完成 Authy 数据的解密与导出,输出 Ente Authenticator 可直接识别的明文格式。

操作步骤

  1. 从该工具的 Release 页面下载适配你操作系统的二进制文件(支持 macOS、Linux、Windows)。
  2. 在终端中执行(假设二进制文件名未修改、且终端当前目录就是二进制所在目录):
./<binary-name> <path_to_export_file>

各系统对应的完整命令示例:

# macOS(注意:Apple Silicon 设备可能需要先安装 Rosetta 2 才能运行) ./authy-export-darwin-amd64 authy_codes.txt # Linux ./authy-export-linux-amd64 authy_codes.txt # Windows ./authy-export-windows-amd64.exe authy_codes.txt

[!NOTE]

在 Apple Silicon(M1/M2 等)设备上运行该工具时,Rosetta 2 可能是必需的,请提前在系统设置中安装。

  1. 命令执行完成后,会在当前目录生成一个名为authy_codes.txt的文本文件,其中包含你的 Authy 验证码,格式即为 Ente 的明文导出格式

接下来,直接跳转到下文「导入到 Ente Authenticator(方法 1 / 2.1 / 4)」一节完成导入。

方法 2:使用 gboudreau 的社区导出指南(Bitwarden JSON 格式)

适用人群:有一定动手能力、希望采用社区公认成熟方案的进阶用户。

GitHub 用户 gboudreau 编写了一份从 Authy 导出验证码的详细指南(由 morpheus 在 Discord 中发现并分享给作者)。按该指南操作后,会生成一个名为authy-to-bitwarden-export.json的 JSON 文件,其结构为Bitwarden 导出格式,Ente Authenticator 原生支持直接导入。

请先完成该指南中的导出步骤,再根据你的结果走下面的分支:

  • 导出成功且导入也成功:直接进入下文「导入到 Ente Authenticator(方法 2)」。
  • 导出成功但导入失败:见下文「方法 2.1」。
  • 导出本身失败:说明该方法已因 Authy 限制而失效,请改用方法 1(若可用)或方法 3 / 方法 4。

方法 2.1:导出成功但导入失败时的兜底转换(Python 脚本)

[!NOTE]

本节仅适用于「用方法 2 成功导出了验证码,但导入 Ente Authenticator 失败」的用户。如果导入已成功,或尚未尝试导入,请忽略本节。

正常情况下,Bitwarden 格式的导出可以直接导入 Ente Authenticator。若因某些原因导入失败,可以先用下面这个 Python 小程序把 JSON 文件转换成 Ente 能识别的 TXT 明文文件,再改用「明文导入」:

import json import os totp = [] accounts = json.load(open('authy-to-bitwarden-export.json','r',encoding='utf-8')) for account in accounts['items']: totp.append(account['login']['totp']+'\n') writer = open('auth_codes.txt','w+',encoding='utf-8') writer.writelines(totp) writer.close() print('Saved to ' + os.getcwd() + '/auth_codes.txt')

运行前提与注意事项

  • 电脑上需要安装Python 3
  • 运行前务必保证Python 脚本与authy-to-bitwarden-export.json位于同一目录,否则程序无法读取文件。
  • 运行方式二选一:
    • 直接在 IDE 中打开脚本并运行;
    • 或在终端执行:
      • macOS / Linux 及任何使用 bash 的系统:python3 authy_to_ente.py
      • Windows:py -3 authy_to_ente.py

运行成功后会在当前目录生成auth_codes.txt,接下来按「导入到 Ente Authenticator(方法 1 / 2.1 / 4)」的明文导入流程操作即可。

方法 3:在 root 安卓设备上导出(Android OTP Extractor / Aegis)

适用人群:拥有root 权限、且系统为Android 6 或更新版本、能通过Play Integrity校验的进阶用户。

该方法需要一台已 root 的安卓手机,通过读取 Authy 在本机存储的加密数据来导出验证码。下面提供两条路线,任选其一。

路线 A:使用 Android OTP Extractor

puddly 开发的 Android OTP Extractor 可以直接从已安装的应用中提取 TOTP 密钥,并以二维码 / otpauth URL 的形式输出。

  1. 准备电脑环境:安装 Python 3,并从 Android 官方平台工具页下载 adb(Android Debug Bridge)二进制。

  2. 将 adb 加入系统 PATH(以 Windows 为例):

    • 搜索并打开“编辑系统环境变量”;
    • 点击“环境变量”;
    • 在顶部“用户变量”中找到Path变量并点击“编辑”;
    • 点击“新建”,填入你解压 Platform Tools 的路径。
  3. 在手机上开启 USB 调试

    • 打开“设置” → 进入“关于手机”(平板设备可能显示为“关于平板”,若已开启开发者选项可跳过下列两步);
    • 连续点击“版本号”7 次或更多
    • 返回设置主页面 → 进入“系统设置” → “开发者选项”;
    • 打开“USB 调试”开关;
    • 在电脑上运行adb devices确认设备已被识别(手机上可能会弹出“允许”提示,需要点击允许以授权电脑访问)。
  4. 用 pip 安装 Android OTP Extractor

    pip install git+https://github.com/puddly/android-otp-extractor
  5. 从 Play 商店安装 Authy 并登录你的账户。

  6. 运行以下命令导出 TOTP(以二维码与 URL 形式输出):

    python -m android_otp_extractor --prepend-issuer --include authy

导出结果会在浏览器中以二维码 + otpauth URL 的形式展示,方便下一步在 Ente Authenticator 中逐个扫描导入(见「导入到 Ente Authenticator(方法 3)」)。

路线 B:使用 Aegis Authenticator

beemdevelopment 开发的 Aegis Authenticator 内置了“从 Authy 导入”的能力,可借助 root 权限直接完成迁移,再导出为 JSON / TXT。

  1. 在已 root 的手机上安装 Authy 并登录。
  2. 从 Google Play 商店安装 Aegis Authenticator。
  3. 打开 Aegis,点击右上角三个点菜单 →导入与导出
  4. 选择“从其他应用导入”,然后选择Authy
  5. 应用会请求 root 权限,授权后自动从 Authy 导入全部验证码。
  6. 回到“导入与导出”菜单,使用“导出到文件”将验证码导出为jsontxt文件。

导出的文件格式与 Ente Authenticator 的导入选项对应:JSON 走 Bitwarden 式导入,TXT 走明文导入。可按下文对应流程操作。

方法 4:Authy-iOS-MiTM(iOS 设备 + 电脑)

适用人群技术型 iOS 用户,且因方法 1 / 2 已被修补无法使用、也没有 root 安卓设备(方法 3 不可用)的情况。

该方法的核心原理是:在 Authy 应用首次登录时拦截其接收到的网络数据,其中包含你账户的加密验证器令牌(encrypted authenticator tokens)。拿到加密令牌后,再使用你的**备份密码(backup password)**进行解密,最后转换成 Ente 可识别的令牌文件。

流程分为两步:

  1. 获取并解密加密令牌:参考社区维护的 Authy-iOS-MiTM 指南(更新版本),或 原始版指南。
  2. 转换为 Ente 可识别的格式:原始指南会生成decrypted_tokens.json,使用对应的 Python 脚本将其转换为ente_auth_import.plain文件;然后将该文件传输到装有 Ente Authenticator 的设备上,按下方「导入到 Ente Authenticator(方法 1 / 2.1 / 4)」的明文导入流程操作。

导入到 Ente Authenticator:按导出格式选择导入入口

导出工作完成后,你会得到以下三种产物之一,Ente 的导入入口相应有两种:

导出方法产物格式导入入口
方法 1 / 方法 2.1 / 方法 4TXT 明文(或.plainPlain text(明文导入)
方法 2Bitwarden JSONBitwarden
方法 3JSON / TXT / 二维码按文件类型选择对应入口,或扫描二维码

导入到 Ente Authenticator(方法 1 / 2.1 / 4 —— 明文 TXT 导入)

  1. 将 TXT 文件复制到装有 Ente Authenticator 的设备上。
  2. 登录你的账户(如果尚未登录),或点击“不备份使用 / Use without backups”
  3. 打开左上角导航菜单(汉堡按钮),进入Data(数据)Import codes(导入验证码)
  4. 选择Plain text(明文)选项。
  5. 选择之前生成的 TXT 文件。

明文格式说明(来自 Ente 移动端导入页):明文文件中的每一行应为一条otpauth://格式的 URI,例如:

otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET

从源码看,明文导入解析器 会先判断内容是否以otpauth://开头:是则按otpauth://逐行(或按逗号分隔)解析为验证码;否则尝试按 JSON 对象解析,读取其中的items数组。因此,若你的 TXT 内容实际为 JSON 结构(如方法 2.1 转换产物之外的 JSON),解析器也能兼容处理。单条记录解析失败不会中断整体导入,合法的条目仍会被保留。

导入到 Ente Authenticator(方法 2 —— Bitwarden JSON 导入)

  1. 将 JSON 文件复制到装有 Ente Authenticator 的设备上。
  2. 登录你的账户(如果尚未登录),或点击“不备份使用 / Use without backups”
  3. 打开左上角导航菜单(汉堡按钮),进入Data(数据)Import codes(导入验证码)
  4. 选择Bitwarden选项。
  5. 选择之前生成的 JSON 文件。

如果这一步失败,请回到方法 2.1改用明文导入。

导入到 Ente Authenticator(方法 3 —— 扫描二维码)

  1. 打开手机上的 Ente Authenticator。
  2. 登录你的账户(如果尚未登录),或点击“不备份使用 / Use without backups”
  3. 点击应用右下角的添加按钮
  4. 选择“扫描二维码 / Scan a QR code”,扫描浏览器(或 Android OTP Extractor 输出)中的二维码。

附录:Ente Authenticator 的导入机制与源码印证

为了让你对导入过程更放心,这里结合 ente 仓库的移动端源码说明一下 Ente 侧到底做了什么:

  • 导入入口:Ente Authenticator 的“导入验证码”入口位于设置页面的 Data 区域。在 data_settings_page.dart 中,「导入验证码」与「导出验证码」「重复验证码」并列展示。点击后进入 import_page.dart,其ImportType枚举与importOptions列表列出了全部支持的导入来源,包括plainText(明文)、bitwarden(Bitwarden)、aegis(Aegis)、twoFas(2FAS)、andOTP、googleAuthenticator、proton、ravio、lastpass、otpAuth、encrypted(Ente 加密格式)——你在 App 里看到的每个导入选项都有对应的实现文件。

  • 导入分发:import_service.dart 中的ImportService.initiateImport()按类型把操作分发给对应的导入模块,例如 Bitwarden 对应 bitwarden_import.dart,明文对应 plain_text_import.dart。

  • Bitwarden JSON 的解析:bitwarden_import.dart 会读取 JSON 中的items数组,逐条判断login.totp字段:若 TOTP 是otpauth://URL 则按 URL 解析;若是steam://前缀则按 Steam 类型解析;否则以name作为 issuer、login.username作为 account、login.totp作为密钥构造 TOTP 验证码。同时还会尝试把folderId映射为标签(tags)附加到验证码上,从而保留你在 Bitwarden/Authy 侧的分组信息。

  • 保存与同步:所有导入模块最终都会调用 import_flow.dart 中的saveImportedCodes():先将解析出的验证码逐条写入本地的CodeStore(暂不同步),随后触发一次AuthenticatorService.onlineSync(),把新导入的验证码同步到云端——因此导入完成后你的其他设备也会自动获得这些验证码(前提是已登录同一账户)。

  • 验证码模型:code.dart 中的Code.fromOTPAuthUrl()(code.dart)负责把otpauth://URI 解析为Code对象,支持从 URI 中提取 issuer、account、digits、period、algorithm、counter 等参数,并会处理账户名中未转义的#字符等边界情况。fromExportJson()(code.dart)则用于从 Ente 自己的导出 JSON 恢复验证码。如果你后续想从 Ente 再导出(例如备份),data_settings_page.dart 中同样提供了「导出验证码」入口。

迁移后的安全清理

迁移完成后,你的 TOTP 密钥已安全存储在 Ente Authenticator 中(本地加密存储 + 可选云端端到端加密同步)。出于安全考虑,强烈建议删除迁移过程中产生的所有未加密 JSON 与 TXT 文件(例如authy_codes.txtauthy-to-bitwarden-export.jsonauth_codes.txtente_auth_import.plain),因为这些文件一旦泄露,等同于你的所有 2FA 密钥一并泄露。

同时请记住本指南开头的提醒:在确认所有账户均已成功导入 Ente Authenticator 之前,不要从 Authy 中删除任何验证码——迁移这件事,稳妥比速度更重要。

【免费下载链接】ente💚 End-to-end encrypted cloud for everything.项目地址: https://gitcode.com/GitHub_Trending/en/ente

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 3:47:21

线性回归实战:波士顿房价预测Python源码与原理详解

简介&#xff1a;这是一份基于线性回归实现波士顿房价预测的Python源码大作业项目&#xff0c;适合机器学习初学者、课程设计及期末大作业场景。项目采用梯度下降法&#xff08;含批量梯度下降BGD与小批量梯度下降MBGD&#xff09;优化线性回归模型&#xff0c;完整覆盖数据导入…

作者头像 李华
网站建设 2026/9/11 3:46:08

香港可编辑地图技术解析与应用实践

1. 项目背景与核心价值 香港作为国际大都市&#xff0c;其城市空间结构复杂多变。传统静态地图难以满足城市规划、商业选址、交通管理等动态需求。"香港地图可编辑版"正是为解决这一痛点而生。这类地图工具允许用户根据实际需求修改地图元素&#xff0c;比如添加临时…

作者头像 李华
网站建设 2026/9/11 3:40:47

云MySQL vs自建MySQL:瑶池RDS与自主部署的决策逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 3:39:39

智慧农业执行器开关控制实战:风机、卷帘、水肥机、电磁阀从接线到排障

先聊点实在的。搞智慧农业的人&#xff0c;很多都卡在执行器控制这一关。传感器、网关、云平台都搭得差不多了&#xff0c;结果一到真正控制风机、卷帘、水肥机、电磁阀的时候&#xff0c;各种问题就冒出来了——继电器噼里啪啦响但设备不动、卷帘机正反转打架烧了接触器、电磁…

作者头像 李华
网站建设 2026/9/11 3:38:57

HMI进化论:从“傻白甜”显示终端到边缘AI智慧大脑的三级跳

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 3:35:56

Python enumerate函数用法与性能优化全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华