Bash

生成非常大文件的二維碼?

  • January 12, 2021

我想生成我的 4096 位裝甲GPG私鑰的二維碼。關鍵是這麼大,程序似乎因為它的大小而失敗。qrencode

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

結果:

無法對輸入數據進行編碼:數值結果超出範圍

我怎樣才能做到這一點?是否有可以處理非常大的 GPG 密鑰的 qrencode 替代程序?我想按照這個security.SE問題的建議將它列印在紙上。


@geruetzel 和 @cuonglm 的評論正在解決我的問題的這個版本

您的錯誤消息已經提示您出了什麼問題!

您的單線將實際文件內容作為文件名提供給 qrencode 程序。因此出現錯誤消息。

試試qrencode -o test.png -t png < private.key

你應該看看 shell 輸入輸出重定向。例如,I/O 重定向

我看到您也找到了訪問 qrencode 開發人員 GitHub 儲存庫的方法 :) 有一個解釋為什麼 4096 位密鑰不能編碼為 QR 碼:

qrencode 將您的私有 GPG 密鑰編碼為 8 位 (binary|utf-8),因為該密鑰不是純字母數字。它包含特殊字元。字母數字模式僅支持那些特殊字元 .(%*+-./:)。所以最大 GPG 密鑰只能是 2953 個字元長。

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

無法將密鑰編碼為單個 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

如果沒有錯誤消息,則密鑰文件已正確重建。

引用自:https://unix.stackexchange.com/questions/280222