paper-age

paper-age

Age格式加密的纸质备份工具

PaperAge 是一款基于 Age 加密格式的开源纸质备份工具,专为安全存储小型秘密信息而设计。该工具可从文件或标准输入加密数据,生成含加密二维码的 PDF 文件,支持 A4 和信纸尺寸。PaperAge 通过优化二维码纠错级别和隐藏密码,确保在不受信任的打印环境下使用安全。主要应用于备份双因素认证恢复码等敏感数据,为需要离线存储方案的用户提供了简便而安全的选择。

PaperAge加密备份QR码Age格式PDF输出Github开源项目
<picture style="width: 76px; height: 96px" width="76" height="96"> <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/43314/216831744-e17e8282-669d-4716-b728-1ba31edda3f0.svg"> <source media="(prefers-color-scheme: light)" srcset="https://yellow-cdn.veclightyear.com/835a84d5/72e8f034-72dc-4d4a-890a-e7ba94497d54.svg"> <img style="width: 76px; height: 96px" width="76" height="96" alt="" src="https://yellow-cdn.veclightyear.com/835a84d5/72e8f034-72dc-4d4a-890a-e7ba94497d54.svg"> </picture>

PaperAge

使用Age格式(age-encryption.org/v1)轻松安全地备份(小型)机密信息到纸质文档。

Rust构建 codecov GitHub发布(最新语义化版本) Crates.io

特性

  • 接受来自文件或标准输入的输入
  • 使用密码对输入进行加密
  • 输出包含加密密文二维码的PDF文件
  • 支持A4和信纸尺寸
  • 优化二维码的纠错级别(较少数据→更高纠错能力)
  • 密码不会显示在PDF上,因此可以在不受信任的打印机上打印(例如在工作场所或图书馆)
  • 恢复备份时无需使用PaperAge:使用任何二维码扫描器和任何Age实现即可。

局限性

  • 由于二维码无法编码任意大小的有效载荷,最大输入大小约为1.9 KiB
  • 目前仅支持基于密码的加密

威胁模型和使用场景

  • 主要用于保存机密信息,如双因素认证恢复码
  • 手动添加密码允许使用公共打印机,例如图书馆、办公室、复印店等
  • 为了额外保护,可以记住密码或将其与打印件分开存储
  • 即使密码就在旁边,扫描和解密的需求也能防止简单的对手(普通窃贼不会关心你的Mastodon账户)
  • 如果需要防范国家级或其他高级威胁,请寻找其他解决方案

示例

这是输出PDF的样子(或者查看信纸版本)。二维码可以轻松使用iPhone(或任何现代智能手机)读取。

<a title="下载示例PDF(A4)" href="https://github.com/matiaskorhonen/paper-age/files/10675081/snakeoil.pdf"><img alt="A4纸张,标题为'PaperAge',包含二维码和PEM编码部分" width="420" height="594" src="https://yellow-cdn.veclightyear.com/835a84d5/21ab7e84-c079-476f-a38d-c9fbcdcb2ee1.svg"></a>

如果你想自己尝试解码,密码是snakeoil

安装

发布版本可用于macOS(Apple Silicon和Intel)、Linux(ARM和x86-64)和Windows(x86-64)。

虽然Windows版本应该可以在Windows 10和11上运行,但只有Windows 11是"官方"支持的。

Homebrew

添加PaperAge Tap以使用Homebrew安装最新版本:

brew tap matiaskorhonen/paper-age brew install paper-age

二进制文件

Releases页面下载最新版本,解压文件,并将paper-age二进制文件安装到PATH中的某个位置(例如/usr/local/bin)。

# 下载最新版本(选择你的操作系统) # macOS(Intel或Apple Silicon): curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-universal-apple-darwin.tar.gz # Linux(x86-64): curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-x86_64-unknown-linux-gnu.tar.gz # Linux(ARM): curl -Lo paper-age.tar.gz https://github.com/matiaskorhonen/paper-age/releases/download/v1.3.3/paper-age-aarch64-unknown-linux-gnu.tar.gz # 使用GitHub CLI工具验证工件证明(可选) gh attestation verify paper-age.tar.gz --repo matiaskorhonen/paper-age # 解压文件 tar -xf paper-age.tar.gz # 将二进制文件安装到/usr/local/bin sudo install paper-age /usr/local/bin/ # 或者:sudo mv paper-age /usr/local/bin/

Cargo

如果您已经安装了 Rust,可以使用 Cargo 安装 PaperAge:

cargo install paper-age

构件认证

从 v1.3.1 版本开始,PaperAge 发布版本具有构件认证。认证是使用 GitHub 的工具生成的。

使用方法

paper-age [选项] [输入]

参数

  • <输入> — 要读取的文件路径。默认为标准输入。最大约 1.9KB。

选项

  • -t, --title <标题> — 页面标题(最多 64 个字符)

    默认值:PaperAge

  • -n, --notes-label <备注标签> — 二维码下方的备注标签(最多 32 个字符)

    默认值:密码:

  • --skip-notes-line — 跳过备注占位行(例如 密码:________)

  • -o, --output <输出> — 输出文件名。使用 - 表示标准输出。

    默认值:out.pdf

  • -s, --page-size <页面大小> — 纸张大小 [默认:a4] [可选值:a4, letter]

  • -f, --force — 如果输出文件已存在,则覆盖

  • -g, --grid — 绘制网格样式以调试布局问题

  • --fonts-license — 打印嵌入字体的许可证

  • -v, --verbose... — 每次出现增加输出详细程度

  • -q, --quiet... — 每次出现减少输出详细程度

  • -h, --help — 打印帮助信息

  • -V, --version — 打印版本信息

备注/密码字段

二维码下方的备注字段可以通过 --notes-label <文本>--skip-notes-line 参数自定义。标签长度没有强制限制,但最终文本会超出页面边界。

示例

  • 打印提示占位符而不是密码:

    paper-age --notes-label="提示:"
  • 打印时间戳而不是备注字段:

    paper-age --notes-label="创建时间:$(date -Iseconds)" --skip-notes-line

压缩

PaperAge 完全不关心输入文件的类型。如果需要压缩更多数据,可以在将文件传递给 PaperAge 之前对其进行压缩,例如:

gzip --best --stdout in.txt | paper-age --output=compressed.pdf --title="in.txt.gz"

压缩比因输入数据而异,是否值得这样做取决于您。

扫描二维码

在 iOS 上,最好使用控制中心的"扫码"而不是相机应用。"扫码"可以将二维码内容复制到剪贴板,而不仅仅是搜索它。

在 Android 上,内置相机应用应该可以将二维码内容复制到剪贴板。Google 镜头应用似乎也可以正常工作。

开发

假设您已经安装了 Rust,从 git 本地运行最新版本:

  1. 拉取此仓库
  2. 运行测试:cargo test
  3. 获取帮助:cargo run -- -h
  4. 从标准输入加密:echo "Hello World" | cargo run -- --title="来自标准输入的秘密" --out="stdin.pdf"
  5. 以最大详细程度运行:echo "Hello World" | cargo run -- -vvvv

发布

当 git 中标记新版本时,会在 GitHub 上编译和发布。

使用 cargo release 标记和发布新版本,例如:

cargo release 1.2.3

⚠️ 在命令后附加 --execute 以实际执行发布。

许可证和致谢

PaperAge 根据 MIT 许可证发布。详情请参阅 LICENSE.txt。

包含 SIL 开放字体许可的 IBM Plex Mono 字体。请参阅 IBMPlexMono-LICENSE.txt。

使用来自 github.com/str4d/rage 的 Age 的 Rust 实现和 printpdf 库。

感谢 Ariel Salminen 提供 PaperAge 图标。

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多