Я получаю несколько зашифрованных файлов PGP в день, импортируемых в мое хранилище BLOB-объектов. Мне нужно иметь возможность расшифровать их в другом месте в том же контейнере больших двоичных объектов.
Я уже знаю, что мне нужно создать пользовательскую пакетную активность, чтобы сделать это в ADF, я просто не могу понять, как получить BLOB-объекты в OpenPgp.
Этот пример кода с bitscry.com предлагает использовать потоки в качестве примера:
using (FileStream inputFileStream = new FileStream(@"C:\TEMP\keys\content__encrypted2.pgp", FileMode.Open))
using (Stream outputFileStream = File.Create(@"C:\TEMP\keys\content__decrypted2.txt"))
using (Stream privateKeyStream = new FileStream(@"C:\TEMP\keys\private.asc", FileMode.Open))
pgp.DecryptStream(inputFileStream, outputFileStream, privateKeyStream, "password");
Я пытался открыть капли как потоки, но это не работает.
Это код, который пытается использовать капли как потоки:
Stream sourceStream = keyBlockBlob.OpenRead();
Stream keyStream = sourceCloudBlockBlob.OpenRead();
Stream targetStream = targetCloudBlockBlob.OpenWrite();
pgp.DecryptStream(sourceStream, targetStream, keyStream, "password");
Я понял, что я делаю неправильно. Я не сбрасывал позиции потока на ноль перед переходом к DecryptStream. Этот код работает:
var sourceStream = new MemoryStream();
var keyStream = new MemoryStream();
var targetStream = new MemoryStream();
sourceCloudBlockBlob.DownloadToStream(sourceStream);
sourceStream.Position = 0;
keyBlockBlob.DownloadToStream(keyStream);
keyStream.Position = 0;
pgp.DecryptStream(sourceStream, targetStream, keyStream, "password");
targetStream.Position = 0;
targetCloudBlockBlob.UploadFromStream(targetStream);