OpenPGP已正确安装且运行良好。以下命令适用于Windows cmd:
gpg2 -r rept --encrypt myfile
然而,当我们尝试使用Perl系统调用自动执行上述过程时:
system("gpg2 -r rept --encrypt myfile");
我收到以下错误消息:gpg: rept: skipped: No public key
使用gpg2 --list-keys
,我确实看到添加了公钥。任何人都可以提供一些自动化OpenGPG流程的见解吗?
答案 0 :(得分:3)
在问题中我只能猜到的信息很少,而我的猜测是rept
包含@
因为你有双引号而被解释。
除此之外,请use strict; use warnings;
以便您尽早发现此类错误。还要使用system
的多参数版本,以便不涉及shell,即system("gpg2","-r",....)
。否则,如果rept
或myfile
由用户输入确定,则可能会导致代码执行。
答案 1 :(得分:1)
除了Jens Erat提到的系统帐户问题之外,通过--homedir
参数向所需的gpg配置添加显式绝对路径可能很有用。可能是Windows版本的gpg在这方面有点瘫痪,如果从不同的目录启动,则无法找到密钥。
根据您对加密数据的处理方式,您还可以查看一些模块:我有Crypt::OpenPGP
的良好体验(虽然纯粹的Perl很慢),{{1看起来它会使用外部gpg可执行文件做你想做的事。