繁体   English   中英

是否可以将消息和公钥从stdin传递到gpg / gpg2?

[英]Is it possible to pass both a message and a public key from stdin to gpg/gpg2?

如果我在过程存储器中既有消息(M)又有公共密钥(P),那么用P加密M而不写入任何临时中间文件的方式是什么?

我是否有可能将两者都传递到stdin并使用一些棘手的协议gpg(2)支持从管道接受两者?

如果没有-php的其他替代方案是什么(请记住没有本机绑定,并且不可能使用第三者扩展名(它不在标准的ubuntu存储库中,并且支持自定义版本且自定义存储库过于昂贵)) )?

我认为这种机制不存在。 GnuPG希望将密钥环作为文件来执行pubkey操作-我不认为它可以接受一次加密操作的实际公共密钥,而无需将其置于密钥环中。

首先,您必须将该公钥导入密钥环,然后将该密钥环位置传递给GnuPG-换句话说,您必须能够将其写出。 如果您不想将它们放在磁盘上,则可以使用/dev/shm ,这是大多数Linux系统上都存在的ramdisk。

在很大程度上,这是我在Server Fault上发布类似问题的答案。 无法复制,因为跨站点重复项是不可能的。

GnuPG要求将要使用的所有密钥导入密钥环。

如果您不想将其导入到常规密钥环,请使用另一个(临时)密钥环,甚至使用临时GnuPG主目录(也将绕过任何配置)。 如果您不想将密钥存储在硬盘上,请考虑使用内存磁盘。

临时钥匙圈

--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

适用于Ubuntu的PHP的GnuPG

有一个用于GnuPG的官方PHP PEAR模块,该模块也在官方存储库中为Ubuntu打包了 ,我强烈建议您使用此模块,而不是手动构建与GnuPG的接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM