是否可以将消息和 public 密钥从 stdin 传递到 gpg/gpg2?
Is it possible to pass both a message and a public key from stdin to gpg/gpg2?
如果我在进程内存中同时拥有消息 (M) 和 public 密钥 (P),那么在不写入临时中间文件的情况下使用 P 加密 M 的方法是什么?
有没有机会我可以将两者都传递到标准输入并使用一些棘手的协议 gpg(2) 支持从管道接受两者?
如果没有 - php 的其他替代方案是什么(请记住没有本机绑定并且不可能使用第 3 方扩展(它不在标准 ubuntu 存储库中并且支持自定义构建和自定义存储库太昂贵了))?
我不相信存在这样的机制。 GnuPG 希望将密钥环作为一个文件来执行公钥操作——我不相信它能够接受实际的 public 密钥来进行一次性加密操作,而它们不在密钥环中。
您首先必须将该 public 密钥导入密钥环,然后将该密钥环位置传递给 GnuPG —— 换句话说,您必须能够将它写到某个地方。如果你不想把它们放在磁盘上,你可以使用 /dev/shm
,它是大多数 Linux 系统上的 ramdisk。
对大部分来说,这是我的回答similar question posted on Server Fault。已复制,因为跨站点复制是不可能的。
GnuPG 要求将您要使用的所有密钥导入密钥环。
如果您不想将它导入您的普通密钥环,请使用另一个(临时)密钥环,甚至是一个临时 GnuPG 主目录(这也将绕过任何配置)。如果您不想将密钥存储在硬盘上,请考虑使用 memdisk。
临时钥匙圈
设置--primary-keyring temporary.gpg
默认使用(并在必要时创建)临时密钥环。它将在您的 GnuPG 主目录中创建(默认为 ~/.gnupg/temporary.gpg
)。您的普通密钥环仍然可用,但导入将转到临时密钥环。想删就删。
例如:
gpg --primary-keyring temporary.gpg --import key.asc
gpg --primary-keyring temporary.gpg --recipient 0xDEADBEEF --encrypt
rm ~/.gnupg/temporary.gpg # can be omitted, not loaded by default
临时 GnuPG 主目录
这也将重置所有配置,并且可能有助于测试一些东西。设置 --homedir [folder]
或环境变量 $GNUPGHOME
,导入密钥,执行任何操作,然后根据需要删除文件夹。
例如:
export GNUPGHOME=/tmp/gnupg # Or apply --homedir on each invocation
gpg --import key.asc
gpg --recipient 0xDEADBEEF --encrypt
rm -r $GNUPGHOME # Can be omitted
unset $GNUPGHOME
GnuPG 在权限方面非常挑剔,您可能需要对 $GNUPGHOME
文件夹应用更严格的权限才能执行所有操作。很可能保留一些游乐场-$GNUPGHOME
。
PHP 在 Ubuntu
中的 GnuPG
GnuPG 有一个官方 PHP PEAR 模块,它也是 packaged for Ubuntu in the official repositories,我强烈建议使用这个模块而不是手动构建 GnuPG 接口。
如果我在进程内存中同时拥有消息 (M) 和 public 密钥 (P),那么在不写入临时中间文件的情况下使用 P 加密 M 的方法是什么?
有没有机会我可以将两者都传递到标准输入并使用一些棘手的协议 gpg(2) 支持从管道接受两者?
如果没有 - php 的其他替代方案是什么(请记住没有本机绑定并且不可能使用第 3 方扩展(它不在标准 ubuntu 存储库中并且支持自定义构建和自定义存储库太昂贵了))?
我不相信存在这样的机制。 GnuPG 希望将密钥环作为一个文件来执行公钥操作——我不相信它能够接受实际的 public 密钥来进行一次性加密操作,而它们不在密钥环中。
您首先必须将该 public 密钥导入密钥环,然后将该密钥环位置传递给 GnuPG —— 换句话说,您必须能够将它写到某个地方。如果你不想把它们放在磁盘上,你可以使用 /dev/shm
,它是大多数 Linux 系统上的 ramdisk。
对大部分来说,这是我的回答similar question posted on Server Fault。已复制,因为跨站点复制是不可能的。
GnuPG 要求将您要使用的所有密钥导入密钥环。
如果您不想将它导入您的普通密钥环,请使用另一个(临时)密钥环,甚至是一个临时 GnuPG 主目录(这也将绕过任何配置)。如果您不想将密钥存储在硬盘上,请考虑使用 memdisk。
临时钥匙圈
设置--primary-keyring temporary.gpg
默认使用(并在必要时创建)临时密钥环。它将在您的 GnuPG 主目录中创建(默认为 ~/.gnupg/temporary.gpg
)。您的普通密钥环仍然可用,但导入将转到临时密钥环。想删就删。
例如:
gpg --primary-keyring temporary.gpg --import key.asc
gpg --primary-keyring temporary.gpg --recipient 0xDEADBEEF --encrypt
rm ~/.gnupg/temporary.gpg # can be omitted, not loaded by default
临时 GnuPG 主目录
这也将重置所有配置,并且可能有助于测试一些东西。设置 --homedir [folder]
或环境变量 $GNUPGHOME
,导入密钥,执行任何操作,然后根据需要删除文件夹。
例如:
export GNUPGHOME=/tmp/gnupg # Or apply --homedir on each invocation
gpg --import key.asc
gpg --recipient 0xDEADBEEF --encrypt
rm -r $GNUPGHOME # Can be omitted
unset $GNUPGHOME
GnuPG 在权限方面非常挑剔,您可能需要对 $GNUPGHOME
文件夹应用更严格的权限才能执行所有操作。很可能保留一些游乐场-$GNUPGHOME
。
PHP 在 Ubuntu
中的 GnuPGGnuPG 有一个官方 PHP PEAR 模块,它也是 packaged for Ubuntu in the official repositories,我强烈建议使用这个模块而不是手动构建 GnuPG 接口。