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

时间:2017-09-17 05:33:12

标签: 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

没有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.

由于未压缩的大小与gnu parallel的块大小(大约125M)相同,我认为它与GnuPG支持部分块加密有关。我该如何解决这个问题?

FYI

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

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

3 个答案:

答案 0 :(得分:3)

GnuPG不支持连接多个加密流并立即对其进行解密。您必须存储多个文件,并单独解密它们。如果我没有弄错,你的命令甚至会混淆GnuPG的所有并行实例的输出,因此结果或多或少是随机垃圾。

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

答案 1 :(得分:3)

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

打开包装

cat $TARGET/$FILENAME |
  parallel --pipe --recend 'bLoCk EnD\n' -N1 --keep-order --rrs 'gpg --decrypt | xz -d' |
  tar tv
确保我们一次传递一条记录需要

-N1。 GnuPG不支持解密多个合并记录。

答案 2 :(得分:0)

  

这主要是一个gpg问题。 gpg不支持多线程   永不。你可以在网上搜索原因。

  使用gpg v2它甚至变得更糟:你甚至无法运行多个gpg v2实例   并行,因为他们都锁定了gpg-agent,现在正在做所有的事情   工作........也许我们应该在进行大规模加密时寻找替代方案。

https://answers.launchpad.net/duplicity/+question/296122

编辑:不可以。可以同时运行多个gpg v2实例,gpg-agent没有任何问题。