How encrypt data/text stream instead of a file?

David Shaw dshaw at jabberwocky.com
Thu Dec 18 16:52:44 CET 2008


On Dec 18, 2008, at 1:14 AM, don rhummy wrote:

> All the examples of using GnuPG are of giving it a local filename to  
> encrypt or decrypt. How do I pass it data, either as a stream or  
> byte by byte?

GnuPG is designed to be able to accept a stream or a file.  To do a  
stream instead of a file, just don't give a filename.  GnuPG will then  
read data from standard input.

So, for example:

  my-pipeline-that-streams-data | gpg --encrypt | my-pipeline-that- 
accepts-encrypted-data

You can freely mix streams and files as well:

  my-pipeline-that-streams-data | gpg -o output-file.gpg --encrypt

Or

  gpg -o - --encrypt myfile | my-pipeline-that-accepts-encrypted-data

Anyway, that's how you do it on the command line.  If you want to do  
it inside a program, it depends on what language you're using and how  
that language deals with calling out to a command line.  In general,  
though, you want to write data to the head of the GPG pipe, and read  
data from the tail of the GPG pipe.  I do this frequently in C via the  
usual pipe/fork/exec/dup2 method.

David



More information about the Gnupg-users mailing list