С# Поток текста/данных в zip/gpg вместо передачи приложению имени файла?

В настоящее время у меня есть приложение, написанное на C#, которое может взять файл и зашифровать его с помощью gpg.exe.

То, что я пытаюсь сделать, это вместо 1. создания файла (обычно из запросов к базе данных) 2. шифрования файла 3. удаления незашифрованного файла

Я хочу

  1. Собирать информацию в память (в словарь, список или что-то еще)
  2. передать текст/данные в gpg.exe, чтобы получить зашифрованный файл

Я изучил pipestream, перенаправляя стандартный ввод в процесс gpg и т. д., но я не нашел способа обмануть gpg.exe, чтобы он принимал потоковый текст/данные вместо файла на жестком диске.

Сначала я подумал, что если бы я мог сделать это для gpg, я мог бы сделать это и для Zip, но мне интересно, возможно ли это вообще. Нашел несколько ссылок на popen, которые, кажется, связаны с php, но ничего для С#.

По сути, я хочу сделать нижеприведенное программно, при этом text.txt представляет собой материал в памяти, передаваемый в приложение, а не фактический файл на жестком диске.

C:\Program Files\GNU\GnuPG> введите C:\test.txt | zip > plubber.zip C:\Program Files\GNU\GnuPG> введите C:\test.txt | gpg -er "mycomp_operations" > Test.pgp

Спасибо за любую помощь, которую вы можете оказать :)

Тони!


person Community    schedule 23.02.2009    source источник


Ответы (5)


Вы можете использовать DotNetZip для создания zip-файла в памяти, но я не знаю, как это будет взаимодействовать с материалом gpg. DotNetZip может выполнять шифрование AES, но это, очевидно, модель, отличная от PGP или GPG.

Быстрый поиск в Google выдал
эту подсказку в GPG.

Похоже, они запускают gpg.exe в отдельном процессе, ожидая ввода.

person Cheeso    schedule 24.02.2009
comment
Я посмотрел на это и попытался включить часть их кода в приложение для этого, но не смог заставить его работать. - person ; 16.03.2009

Ознакомьтесь с реализацией BouncyCastle C# по адресу:

http://www.bouncycastle.org/csharp/

Это позволит выполнять шифрование и дешифрование GPG без внешних файлов. В настоящее время я использую его, чтобы сделать то же самое для компонента конвейера BizTalk.

person QSmienk    schedule 20.05.2009

Бентон Старк написал хорошую оболочку для GnuPG, которая демонстрирует (среди прочего), как брать данные из потока, направлять их в исполняемый файл GPG и записывать вывод обратно в поток — и все это на C#.

Бентон ответил на другой вопрос со ссылкой на свой веб-сайт. Бентон пишет:

Вы можете попробовать использовать мою бесплатную оболочку GnuPG с открытым исходным кодом для C# (и VB.NET). Весь код лицензируется через MIT, без ограничений GPL. Вы можете найти релиз с исходным кодом на Sourceforge.net.

http://sourceforge.net/projects/starksoftopenpg/

person JTech    schedule 02.08.2012

Ну, named-pipes делает большую часть того, что вы обсуждаете, но, честно говоря, оно того не стоит... в большинстве случаев временный файл является разумным подходом.

person Marc Gravell    schedule 23.02.2009
comment
Я согласен, но меня попросили изучить возможность сделать это без незашифрованного файла на диске в любой момент операции. Это связано с PCI. Это перебор, но я полагаю, это заставит людей охать и ахать по поводу нашей безопасности. - person ; 16.03.2009

Используя наши компоненты SecureBlackbox, вы можете избежать вызова внешней программы для операций ZIP или PGP. Компоненты работают с потоками и не нуждаются во временных файлах.

person Eugene Mayevski 'Callback    schedule 27.06.2010