[分享创造] [开源] 写了个“赛博冷存储”工具,将密码/助记词转为二维码打印,打造真正的物理“冷存储”

正文内容: 大家好,分享一个最近完成的实用小工具: PaperVaultQR (赛博冷存储) 。 👉 GitHub 地址 : https://github.com/100pangci/PaperVaultQR 不知道大家平时是怎么备份 加密钱包助记词、Bitwarden 导出库、GPG/SSH 私钥...
[分享创造] [开源] 写了个“赛博冷存储”工具,将密码/助记词转为二维码打印,打造真正的物理“冷存储”
[分享创造] [开源] 写了个“赛博冷存储”工具,将密码/助记词转为二维码打印,打造真正的物理“冷存储”

正文内容:

大家好,分享一个最近完成的实用小工具:PaperVaultQR (赛博冷存储)

👉 GitHub 地址https://github.com/100pangci/PaperVaultQR

不知道大家平时是怎么备份加密钱包助记词、Bitwarden 导出库、GPG/SSH 私钥这些极低频但要命的数据的? 我的选择是“终极冷备份”:物理纸张打印

但直接打印 Base64 乱码的话,几页纸不仅费眼,真到了需要恢复的时候,OCR 的错误率绝对能让人崩溃。所以我顺手做出了这个工具。

📸 界面截图

GUI 界面

✨ 它能做什么?
  1. 编码:把任何文件(纯文本或二进制文件,自动 Base64 )按 500 字符切片,生成 M 级容错的二维码,并自动排版成标准的 A4 纸、4 列的 Word 文档,打开直接点打印就行。
  2. 解码:把扫描后的图片(手机拍的也行)放在一个文件夹里,丢给它,它能自动按顺序提取、校验、并无损还原成原始文件(连原始文件名都能保留)。

💡 核心亮点:强力抗污损的“抠图式”解码算法

很多同类工具的通病是:一张 A4 纸上如果有 20 个二维码,直接调用 pyzbar 识别,经常会漏掉几个,导致整个文件无法还原。

为了解决这个问题,我构思了一套多阶梯的解码策略(大部分代码是我提供核心思路,然后指导 AI 辅助编写完成的)

  1. 高阈值二值化(去底噪):首先对扫描图进行高阈值( 220 )二值化处理,强行抹除纸张纹理、轻微折痕和阴影。
  2. 连通域分析与物理裁切(核心):在二值图上寻找黑色连通域(模拟寻找二维码定位块/主体),找到区块后,向外扩展 20px 生成 Bbox 边界框,将每一个二维码从大图上“抠”下来,单独喂给解码器。
  3. 多重 Fallback 机制:如果连通域裁切有遗漏,程序还会自动采用“原图”、“灰度图”、“自动对比度图”进行多重回放扫描。配合并发线程池(ThreadPoolExecutor)和 seen_payloads 集合去重,极大地拉高了召回率

同时,在生成 Word 排版时,我没有用复杂的坐标计算,而是**利用了 Word 原生的单行大表格属性 (autofit=False)**,让引擎自己去计算跨页断行,保证了打印格式绝对不会错乱。

💻 运行方式

提供纯命令行和带界面的 GUI ( Release 页面有打包好的 Windows exe ,Linux 也可跑)。

# 生成打印文档 (支持多文件)
python src/core/auto_split_qr.py path/to/input.txt

# 恢复扫描内容 (扫描目录里的图片)
python src/core/scanner_decoder.py path/to/scanned_images_folder

# 打开带界面的 GUI
python src/gui.py
⚠️ 警告
  • 请勿裸奔:二维码也是明文!请务必只备份已经加密过的数据(例如带密码的压缩包、已加密的钱包私钥)。未加密的数据拿微信扫一下就全漏了。
  • 介质寿命:如果你用家用喷墨打印机,记得用防水自封袋密封或者过塑,防止受潮洇墨。

造轮子不易,如果这个小工具刚好能解决你的备份焦虑,或者觉得解码算法的思路有点意思,欢迎去 GitHub 赏个 Star ⭐️

也欢迎大家在帖子里聊聊:你们手里最核心的数据,现在用的是什么极致的备份方案?


来源: v2ex查看原文