2

S3 から gnupg へ、いくつかの大きな対称的に暗号化された .csv.gpg (それぞれ 40GB 以上) ファイルを出力ストリームにストリーミングしようとしています。

暗号化/復号化されたファイル全体をディスクまたはメモリにダウンロードする必要がないように、ストリームを使用してファイルをチャンクで処理したいと思います。

Ruby 2.5.0 とruby​​-gpgme gemを使用して、AWS Ruby S3 SDKを使用してオブジェクトのチャンクをダウンロードし、復号化のために gnupg に渡す例を次に示します。

crypto = GPGME::Crypto.new

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

これを実行すると、最初のチャンクの最後で失敗するまで、有効な復号化された CSV データが STDOUT に表示されます (良い!)。

~/.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