爱意满满的作品展示区。
yuanweipangci05

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

  •  1
     
  •   yuanweipangci05 · 4 days ago · 856 views

    正文内容:

    大家好,分享一个最近完成的实用小工具: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 ⭐️

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


    5 replies    2026-05-22 17:52:03 +08:00
    shortawn
        1
    shortawn  
       4 days ago
    好像十几年前就有了: https://github.com/Rupan/paperbak
    yuanweipangci05
        2
    yuanweipangci05  
    OP
       4 days ago via Android
    @shortawn 哈哈草,好像还真是
    yuanweipangci05
        3
    yuanweipangci05  
    OP
       4 days ago
    @shortawn 不过这个限定软件。我这个拿微信都能扫*
    yuanweipangci05
        4
    yuanweipangci05  
    OP
       4 days ago
    今日测试:将 313KB 的内容用我的软件编码,得到了 642 个二维码,打印后依次扫描,最终结果两个没扫上。把出错的那两个单独截图放在同文件夹内,完美跑通。
    扫描出错率 3‰
    codytseng
        5
    codytseng  
       3 days ago
    在一个新的干净的 docker 容器里生成,助记词手抄到纸上,派生的前十几二十个 public key 复制下来,越少传输越安全
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2578 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:57 · PVG 23:57 · LAX 08:57 · JFK 11:57
    ♥ Do have faith in what you're doing.