如何使用GnuPG和GNU并行进行大文件并行加密?

Yon*_* Yu 5 encryption parallel-processing gnupg pgp gnu-parallel

我正在尝试编写并行压缩/加密备份脚本,以使用GNU parallel,xz和GnuPG进行归档。脚本的核心部分是:

tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . \
    | parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 | gpg --encrypt --recipient $RECIPIENT" \
    | pv > $TARGET/$FILENAME
Run Code Online (Sandbox Code Playgroud)

没有GnuPG加密,它会很好地工作(解压缩和解压缩工作),但是添加并行加密后,它解密失败,并出现以下错误:

[don't know]: invalid packet (ctb=0a)
gpg: WARNING: encrypted message has been manipulated!
gpg: decrypt_message failed: Unexpected error
: Truncated tar archive
tar: Error exit delayed from previous errors.
Run Code Online (Sandbox Code Playgroud)

因为未压缩的大小与gnu parallel的块大小相同(大约125M),所以我认为这与GnuPG对部分块加密的支持有关。我怎么解决这个问题?


费耶

关于随机数生成的另一个并行gpg加密问题

https://unix.stackexchange.com/questions/105059/parallel-pausing-and-resuming

Ole*_*nge 9

tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . |
    parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 | gpg --encrypt --recipient $RECIPIENT;echo bLoCk EnD" |
    pv > $TARGET/$FILENAME
Run Code Online (Sandbox Code Playgroud)

打开包装

cat $TARGET/$FILENAME |
  parallel --pipe --recend 'bLoCk EnD\n' -N1 --keep-order --rrs 'gpg --decrypt | xz -d' |
  tar tv
Run Code Online (Sandbox Code Playgroud)

-N1需要确保我们一次传递一个记录。GnuPG 不支持解密多个合并记录。


Jen*_*rat 5

GnuPG 不支持连接多个加密流并一次解密它们。您将不得不存储多个文件,并分别解密它们。如果我没记错的话,您的命令甚至混淆了 GnuPG 的所有并行实例的输出,因此结果或多或少是随机垃圾。

无论如何:GnuPG 也负责压缩,看看这个--compression-algo选项。如果您更喜欢使用xz,请应用,--compression-algo none这样 GnuPG 就不会再次尝试压缩已经压缩的消息。加密在当今的 CPU 指令中得到了大量支持xz -9,实际上可能比加密更耗时(尽管我没有对此进行基准测试)。