如何执行 GPGTools 的上下文菜单的功能,但在命令行中使用 GPG?

How to do what GPGTools's context menu does, but using GPG in the command line?

我使用 Mac,有时我使用 GPGTools 来执行以下操作:

  1. 打开 TextEdit 应用程序并在其中写入,比方说,"Hello World"。
  2. select "Hello World" 并按住 Control 单击 select 离子,打开上下文菜单。
  3. 在上下文菜单中,select "Services > OpenPGP: Encrypt Selection to New Window" 和 select 出现的对话框中的收件人。

然后弹出一个新的 window,显示一条加密的消息,如下所示:

-----BEGIN PGP MESSAGE-----

hQEMA0cwf/w1ZfpTAQf/Ze9lwDIlewAHXz2t7UgM/CJGB1E1UCHejJF21nSunztI
yf7LRMxb20VvXa6VbrzgObBrlgHS9noKCmgS9CtdXMf1owjXUbZjmFmXlIfxQnuR
**[...]**
Wuqxb83MWOBVzZ2fXKettmb39NfMBR9zEPICiMd48DBvUlR3l3aaptusjRYr865B
9em2G3bK050Y/rT3Dz6WhqNT9m70ePXefM49sjruUPrQwLi9yS+CcV4dfayBgCQD
iT5be+E=
=jqRq
-----END PGP MESSAGE-----

我希望能够使用命令行来做同样的事情。我想知道如何以独立于操作系统的方式做到这一点。该解决方案也适用于 Windows 和 Linux。

我知道 GPGTools 基于 GPG (GnuPG),因此,我认为使用 "gpg" 命令行工具应该可以实现我想要的。我知道如何使用 "gpg" 来加密,例如,一个 "file.txt" 文件并获得一个加密的 "file.txt.gpg" 文件,但是这个加密文件不包含 "PGP MESSAGE" 如图所示以上。

总而言之,我的问题是:如何使用命令行加密文本字符串(不是文件)并获得 "PGP MESSAGE"?

要通过标准输入加密字符串,您可以这样做:

$ gpg --encrypt --armor --hidden-recipient "your_key@address.here" --output -

执行此命令后,它会出现挂起。继续并输入 (copy/paste) 您的字符串。

Pasted string goes here.
Hitting enter creates a new line.
Backspace deletes characters.
You get the idea.

现在按[Enter]键创建一个新行。然后按 [CTRL+D](这表示 "end-of-file")终止程序。

gpg 然后会将您的 ASCII 装甲加密文本直接转储到 shell:

-----BEGIN PGP MESSAGE-----

hQEMAwAAAAAAAAAAAQf7BlN7eYqI3lzZS9soEOEXAMPLEIbTkS8mHYMQ68/WXWVw
QRhF5eNjOS3+9VgKU44I/D7pQ53IOTBC/ABPLp9Ykfi9qDNabw6YFob7HGrT9yN9
/zrpAFztREVpgTLfMVdqOIphCx+A9jk/p9D1nRrGkXlCtRpQw9ho/larlQEPyaEx
hK8TOaoELOrIF1D98KEXAMPLEKRLGmGEncR7Vd5DuTXo62Bs3UZYjVYNaboFwZxS
m0+6gLp2JBMc/Gg1/Llk9ufDEci7Vwd+udvPoGPfpbiIGhp2bOnjN03TEbDenu59
219q03bIrQhGmpbuXs7A3lc80v60BTNJpfXVEXAMPLEhAV8P2G4t9en3oIbXl9nH
rpWObJFCCoeWjtZzwammzzVRzMnQjzKyyQUFF8/FfEut/NkKhxfqXWuW2lsvzChC
5OUQjt+dFSGG3NdMFKuoUco+zECH8XgbO9AkC45fJE5Akg==
=6yVB
-----END PGP MESSAGE-----

旁注:

如果您使用 OS X,也可以使用 pbpaste 直接从粘贴板缓冲区粘贴文本。您可以通过以下方式将其输出通过管道传输到 gpg

$ pbpaste | gpg --encrypt --armor --hidden-recipient "your_key@address.here" --output -

请注意粘贴板缓冲区不会自动清除。如果您在那里复制了一个秘密字符串,请务必复制其他内容(随机无关文本)以在完成后将其清除。例如,通过 ssh 或其他方式访问您帐户的任何人(攻击者)都可以毫不费力地读取您的纯文本机密。

要通过 shell 简单地清除粘贴板缓冲区,请执行:echo | pbcopy