如何使用GnuPG加密明文?

39

我最近一直在使用 GnuPG 进行工作,并且已经开始依赖它的加密文件等功能。

但是,我目前正在处理几个涉及通信(如聊天、电子邮件等)的项目中,我想要使用现有的密钥来加密/解密文本本身,而不是像文件或磁盘映像这样的“容器”。

我想我可以加密容器,将流转换为 base64(或适当的内容),然后将文本标记为此类内容,但我认为可能有更简单的解决方案。我相信我错过了一些简单的东西,但是,嗯,我错过了它。

有什么想法吗?

1个回答

45

那么这个怎么样:

$ echo "hello" | gpg --symmetric --armor --passphrase "asdf"
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (Darwin)

jA0EAwMCWfhRZo0AiwVgyRw5Q26Tf+i6OCiQOVoUNJZEfz5ekBJw6BdVpE88
=ecV3
-----END PGP MESSAGE-----
如果这就是你想要的,你需要设置gpg-agent来处理密码......像那样从命令行中传递密码是相当不安全的(因为机器上的任何程序都可以窃取它)。
如果“现有密钥”指的是“现有的公/私钥对”,那么:
$ echo "hello" | gpg --encrypt --armor -r B230230D
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (Darwin)

hQIMA+Cu7Ed7iNErAQ/8CTkEOOGVub1wEt4+5qnB9gNbVF7TNjWMjw/znKAjFg1j
f0s5xuUoPamvtLXKbs0J6OdpwTZfOkK/MIXxjsz1P4cC01CmoSsdzIkhbqccX7GP
VWRM9P0TxI9005JaxMh9rsoxVP2k/RtK3z2f3didl2SMS45TfhV8MJss5HqeQlVC
KHiCWfbHB7ww68ZIVs/AAx0zVPVld1BwHJcRvFIohBu9GUTrDMYxpOsKNZDVWXb0
154KrNFgnjgueGmh25HYdfJ+gs0Fclsq5XATo2H7gfGnq+DALeWy20ig4o9VOAcj
/KU2HRA/XD13MHRZiyJVTszF1VfvsdANnemI75O+f7z34+P0lQiCCV/Z7xqrd384
9V7Uby8n+9PppD+mpt8wiCjQUfAXmHBptoNw8OwuWUGnw7svCu7wqzgjBTyAxvwL
325/o9O2TTYZvOlpoxGayG3JbKzpHlQDv7RKIwC8W1nr/0q96Hxh+RpZfk0zwGyP
wZOx27AyhLAOJtq6Tfg/ef+Ln6d5BaDWmvF9sC/wKXnjN60X6DSLlMDDIYO01whe
JroyE+R1KMYB7r5y7VUGCoyPcrJj3yQTkYVWuvHSsy3sn7N+iWd/29V/ipFeT5Tb
SKRV/Dj/ypJn07jnsLb2ixqr+UTaARP8el7UTJtYCzxs14xdw4uRvkezKZR08C/S
QQFpMeFcVmxGCQVr5llp24bDjtiIT06VbXqZBiQ+kX9JHUDwYEs1qi+seNAlCG4C
4INLNud/n85iPWrSropiYPPY
=SGgD
-----END PGP MESSAGE-----

在这两种情况下,消息都是使用以下方式解密的:

$ cat encrypted_message | gpg
gpg: CAST5 encrypted data
Enter passphrase: asdf
gpg: encrypted with 1 passphrase
hello

2
哇,我的隧道视野让我没有考虑将信息传输到GPG。不过有一个问题:在处理复杂文本(例如电子邮件、双字节字符集等)的情况下,您会推荐如何处理? - humble_coder
1
我担心在命令行中输入一些无法正确解析的内容,例如:echo "¶ƒ" test" of " this" ´•ª∑ƒ¨¥ƒß∂ | gpg -encrypt --armor...... 但是,我可以将文本保存到文件中,使用“--armor”加密,然后从文件流中读取结果。 - humble_coder
1
如果你是通过编程调用它,你就不会使用echo...那只是一个例子。你应该使用例如popen来运行GPG,然后将原始数据写入管道。 - David Wolever
1
啊哈,明白了。那么,如果你想使用 gpg 二进制文件(而不是使用 http://www.gnupg.org/gpgme.html ),那么使用类似 popen 的东西,然后写入到 gpg 的 stdin 是正确的方法。 - David Wolever
那么,如何再次解密该消息呢? - BoJack Horseman
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接