Как использовать OpenPGP для расшифровки одного блоба в другой - PullRequest
2 голосов
/ 07 апреля 2019

Я получаю несколько зашифрованных PGP файлов в день, импортируемых в мое хранилище BLOB-объектов. Мне нужно иметь возможность расшифровать их в другом месте в том же контейнере BLOB-объектов.

Я уже знаю, что мне нужно создать пользовательское пакетное действие, чтобы сделать это в ADF, я просто не могу понять, как получить большие двоичные объекты в 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");

Я пробовал открывать капли в виде потоков, но они не работают.

Это код, который пытается использовать BLOB-объекты в качестве потоков:

        Stream sourceStream = keyBlockBlob.OpenRead();
        Stream keyStream = sourceCloudBlockBlob.OpenRead();
        Stream targetStream = targetCloudBlockBlob.OpenWrite();

        pgp.DecryptStream(sourceStream, targetStream, keyStream, "password");

1 Ответ

0 голосов
/ 08 апреля 2019

Я понял, что я делаю неправильно. Я не сбрасывал позиции потока до нуля перед тем, как перейти к 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);
...