C# 将文本/数据流式传输到 zip/gpg,而不是向应用程序传递文件名?
我目前有一个用 C# 编写的应用程序,可以获取文件并加密 它使用 gpg.exe
我想做的是,而不是 1. 创建文件(通常来自数据库查询) 2. 加密文件 3.删除非加密文件
我想
- 将信息收集到内存中(到字典或列表或其他什么中)
- 将文本/数据流式传输到gpg.exe以最终得到加密文件 输出
我已经研究了管道流,将标准输入重定向到 gpg 进程等,但我还没有找到一种方法来欺骗 gpg.exe 接受流式文本/数据而不是硬盘驱动器上的文件。
最初想如果我可以为 gpg 做这件事,我也可以为 Zip 做这件事 以及,但我想知道这是否可能。 找到了一些关于 popen 的参考,似乎与 php 相关,但没有任何内容 对于c#。
本质上,我希望使用 text.txt 以编程方式执行以下操作 内存中的内容流式传输到应用程序,而不是实际的文件 硬盘驱动器。
C:\Program Files\GNU\GnuPG>输入 C:\test.txt | 邮编> 水管工.zip C:\Program Files\GNU\GnuPG>输入 C:\test.txt | gpg-er “mycomp_操作”> Test.pgp
感谢您提供的任何帮助:)
托尼!
I currently have an app written in C# that can take a file and encrypt
it using gpg.exe
What I'm trying to do is, instead of
1. Creating a file (from database queries usually)
2. encrypting the file
3. deleting the non-encrypted file
I want to
- Gather info into memory (into a dictionary or a list or whatever)
- stream the text/data into gpg.exe to end up with the encrypted file
outputted
I've looked into pipestream, redirecting standard input to the gpg
process, etc, but I haven't figured out a way to trick gpg.exe into
accepting streamed text/data instead of a file on the hard drive.
Initially figured if I could do it for gpg, I could also do it for Zip
as well, but I'm wondering if it's even possible.
Found some refs to popen which seems to be php related, but nothing
for c#.
Essentially, I'm looking to do the below programatically with text.txt
being stuff in memory streamed to the app instead of an actual file on
the hard drive.
C:\Program Files\GNU\GnuPG>type C:\test.txt | zip > plubber.zip
C:\Program Files\GNU\GnuPG>type C:\test.txt | gpg -er
"mycomp_operations " > Test.pgp
Thanks for any help you may be able to give :)
Tony!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用 DotNetZip 在内存中创建 zip 文件,但我不知道它如何与 gpg 内容交互。 DotNetZip 可以进行 AES 加密,但这显然是与 PGP 或 GPG 不同的模型。
只需快速谷歌搜索即可找到
GPG 上的此提示。
看起来他们在一个单独的进程中运行 gpg.exe,坐在那里等待输入。
You can use DotNetZip to create a zip file in-memory, but I don't know how that would interface with the gpg stuff. DotNetZip can do AES encryption, but that is obviously a different model from PGP or GPG.
Just a quick googly search turned up
this hint on GPG.
Looks like they run the gpg.exe in a separate process, sitting there waiting for input.
请查看 BouncyCastle C# 实现:
http://www.bouncycastle.org/csharp/
将允许 GPG 进程内加密和解密,无需外部文件。 我目前正在使用它为 BizTalk 管道组件执行相同的操作。
Please review the BouncyCastle C# implementation at:
http://www.bouncycastle.org/csharp/
This will allow GPG inprocess encryption and decryption without external files. I am currently using it to do the same thing for a BizTalk pipeline component.
Benton Stark 为 GnuPG 编写了一个很好的包装器,它演示了(除其他外)如何从 Stream 中获取数据,将其通过管道传输到 GPG 可执行文件中,并将输出写回到流中 - 全部都是用 C# 编写的。
本顿回答了另一个问题,并提供了他网站的链接。 本顿写道:
Benton Stark has written a good wrapper for GnuPG which demonstrates (among other things) how to take data from a Stream, pipe it into the GPG executable and write the output back to a stream - all in C#.
Benton has answered another question with a link to his website. Benton writes:
好吧,命名管道可以完成您所讨论的大部分内容,但说实话,这不值得……在大多数情况下,临时文件是一种合理的方法。
Well, named-pipes does most of what you are discussing, but to be honest it isn't worth it... in most cases, a temp file is a reasonable approach.
使用我们的 SecureBlackbox 组件,您可以避免调用外部程序进行 ZIP 或 PGP 操作。 这些组件使用流进行操作,不需要临时文件。
Using our SecureBlackbox components you can avoid calling external program for ZIP or PGP operations. The components operate with streams and don't need temporary files.