生成非常大的文件的二维码?

生成非常大的文件的二维码?

我想生成一个二维码我的 4096 位装甲GPG私钥。密钥太大了,程序qrencode似乎因为它的大小而失败了。

$ gpg --export-secret-keys --armor > ~/private.key
$ ./qrencode -o test.png < ~/private.key

结果:

无法对输入数据进行编码:数值结果超出范围

我怎样才能做到这一点?是否有 qrencode 的替代程序可以处理非常大的 GPG 密钥?我想将其打印在纸上这个安全.SE问题建议。


@geruetzel 和 @cuonglm 的评论正在解决我的问题的这个版本

答案1

密钥无法编码为单个 QR 码。但两个(或更多)可以工作。

  • 导出您的密钥(像以前一样):

    gpg --export-secret-keys --armor > private.key
    
  • 生成最大大小为 2500 字节的文件:

    split -C 2500 private.key splitkey-
    
  • 将每个文件转换为一个 QR 文件(同名,扩展名.qr

    for file in splitkey-??; do
        <"$file" qrencode -s 3 -d 150 -o "$file".qr
    done
    

当需要恢复密钥时。您可以扫描每个二维码,每个二维码都会生成一个字符串。只需按文件名的顺序连接每个字符串即可。假设结果键存储在文件中newkey

您可以测试密钥的内部 CRC-24 是否正确。

 gpg --dearmor newkey >/dev/null

如果没有错误消息,则密钥文件已正确重建。

答案2

您的错误消息已经提示出了问题!

您的一行代码将实际文件内容作为文件名提供给 qrencode 程序。因此出现错误消息。

尝试qrencode -o test.png -t png < private.key

您应该看一下 shell 输入输出重定向。例如,输入/输出重定向

我发现您也找到了访问 qrencode 的开发者 GitHub 存储库的方法:) 这里有一个解释,说明为什么 4096 位密钥无法编码为 QR 码:

qrencode 将您的私人 GPG 密钥编码为 8 位(二进制|utf-8),因为该密钥不是纯字母数字。它包含特殊字符。字母数字模式仅支持特殊字符.(%*+-./:)。因此 GPG 密钥的最大长度只能是 2953 个字符。


https://github.com/fukuchi/libqrencode/issues/31

答案3

如果您传递选项-Sv40(40 是一个版本),qrencode将自动为太大的输入创建多个图像。例如:

qrencode -o private.png -t png -Sv 40 < private.key

将输出private-01.pngprivate-02.png、 和private-03.png

答案4

您可能感兴趣纸钥匙,它的设计目的是获取 GPG 密钥,并将其转换为可以在纸上打印的字节序列。扫描或键入文本后,可以随后从文本中恢复密钥。

还有一个讨论是纸质数据存档的各种方式您可能会觉得有趣。

相关内容