Я пытаюсь передать несколько больших симметрично зашифрованных файлов .csv.gpg (40 ГБ + каждый) из S3 в gnupg в выходной поток.
Я хотел бы обрабатывать файлы по частям, используя потоки, чтобы нам никогда не приходилось загружать весь зашифрованный/расшифрованный файл на диск или в память.
Вот пример использования AWS Ruby S3 SDK для загрузки фрагментов объекта и передачи их в gnupg для расшифровки, используя Ruby 2.5.0 с жемчуг ruby-gpgme.
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 расшифровывать куски за раз или он должен читать весь файл перед записью вывода?
- Должны ли куски иметь определенный размер и/или каким-либо образом ограничиваться?
Любая обратная связь будет принята с благодарностью.