C#将文本/数据流式传输到zip / gpg而不是传递app文件名?

时间:2009-02-23 23:11:03

标签: c# zip stream pipe gnupg

我目前有一个用C#编写的应用程序可以接收文件并进行加密 它使用gpg.exe

我要做的是,而不是 1.创建文件(通常来自数据库查询) 2.加密文件 3.删除未加密的文件

我想

  1. 将信息收集到内存中(放入字典或列表或其他内容)
  2. 将文本/数据流式传输到gpg.exe以最终获得加密文件 输出
  3. 我研究过pipestream,将标准输入重定向到gpg 进程等,但我还没有找到一种方法来欺骗gpg.exe 接受流式文本/数据而不是硬盘驱动器上的文件。

    最初认为如果我可以为gpg做,我也可以为Zip做 同样,但我想知道它是否可能。 发现一些popen似乎与php有关,但没有 对于c#。

    基本上,我希望用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

    感谢您提供的任何帮助:)

    托尼!

5 个答案:

答案 0 :(得分:1)

您可以使用DotNetZip在内存中创建一个zip文件,但我不知道它将如何与gpg接口。 DotNetZip可以进行AES加密,但这显然是与PGP或GPG不同的模型。

只是一个快速的googly搜索出现了 GPG this hint

看起来他们在一个单独的进程中运行gpg.exe,坐在那里等待输入。

答案 1 :(得分:1)

请查看BouncyCastle C#实现:

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

这将允许GPG进程加密和解密,无需外部文件。我目前正在使用它为BizTalk管道组件做同样的事情。

答案 2 :(得分:1)

Benton Stark为GnuPG编写了一个很好的包装器,它演示了(除其他事项外)如何从Stream获取数据,将其传输到GPG可执行文件并将输出写回流 - 所有这些都在C#中。

Benton已回复another question并提供了指向其网站的链接。本顿写道:

  

您可以尝试使用我的开源和免费的GnuPG包装来获取C#(和   VB.NET)。所有代码都通过MIT许可,非GPL限制。您   可以在Sourceforge.net找到包含源代码的版本。

     

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

答案 3 :(得分:0)

好吧,命名管道完成你正在讨论的大部分内容,但老实说它不值得......在大多数情况下,临时文件是一种合理的方法。

答案 4 :(得分:0)

使用我们的SecureBlackbox组件,您可以避免调用ZIP或PGP操作的​​外部程序。组件使用流操作,不需要临时文件。