OpenPGP - en / decryption在cmd中工作,但在Perl脚本中不起作用

时间:2015-12-07 07:58:54

标签: perl gnupg

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流程的见解吗?

2 个答案:

答案 0 :(得分:3)

在问题中我只能猜到的信息很少,而我的猜测是rept包含@因为你有双引号而被解释。

除此之外,请use strict; use warnings;以便您尽早发现此类错误。还要使用system的多参数版本,以便不涉及shell,即system("gpg2","-r",....)。否则,如果reptmyfile由用户输入确定,则可能会导致代码执行。

答案 1 :(得分:1)

除了Jens Erat提到的系统帐户问题之外,通过--homedir参数向所需的gpg配置添加显式绝对路径可能很有用。可能是Windows版本的gpg在这方面有点瘫痪,如果从不同的目录启动,则无法找到密钥。

根据您对加密数据的处理方式,您还可以查看一些模块:我有Crypt::OpenPGP的良好体验(虽然纯粹的Perl很慢),{{1看起来它会使用外部gpg可执行文件做你想做的事。