![](/img/trans.png)
[英]"gpg: Can't check signature: No public key" upon initializing a repo from code aurora
[英]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
这还将重置所有配置,并且可能有助于测试某些内容。 设置--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
。
有一个用于GnuPG的官方PHP PEAR模块,该模块也在官方存储库中为Ubuntu打包了 ,我强烈建议您使用此模块,而不是手动构建与GnuPG的接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.