2

我正在尝试将几个大型对称加密的 .csv.gpg(每个 40GB+)文件从 S3 流式传输到 gnupg 到输出流。

我想使用流分块处理文件,这样我们就不需要将整个加密/解密文件下载到磁盘或内存中。

这是一个使用AWS Ruby S3 SDK下载对象块并将它们传递给 gnupg 进行解密的示例,使用 Ruby 2.5.0 和ruby​​-gpgme gem

crypto = GPGME::Crypto.new

s3_client.get_object(bucket: BUCKET, key: KEY) do |chunk|
  crypto.decrypt(chunk, password: PASSWORD, output: $stdout)
end

运行此程序时,我在 STDOUT 中看到有效的解密 CSV 数据(好!),直到它在第一个块的末尾失败:

~/.rvm/gems/ruby-2.5.0/gems/gpgme-2.0.14/lib/gpgme/ctx.rb:435:in `decrypt_verify': 解密失败 (GPGME::Error::DecryptFailed)

这就是我卡住的地方。

  • gnupg 可以一次解密块还是必须在写入输出之前读取整个文件?
  • 块是否需要具有一定的大小和/或以某种方式分隔?

任何反馈将不胜感激。

4

0 回答 0