OpenPGP - en/decryption 在 cmd 中有效,但在 Perl 脚本中无效

OpenPGP - en/decryption works in cmd but not in Perl script

OpenPGP已正确安装,运行良好。以下命令适用于 Windows cmd:

gpg2 -r rept --encrypt myfile

但是,当我们尝试使用 Perl 系统调用自动执行上述过程时:

system("gpg2 -r rept --encrypt myfile");

我收到以下错误消息:gpg: rept: skipped: No public key

使用 gpg2 --list-keys,我确实看到添加了 public 键。谁能提供一些自动化 OpenGPG 流程的见解?

鉴于问题中的信息很少,我只能猜测,我的猜测是 rept 包含一个 @,它会被解释,因为你有双引号。

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

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

根据您想对加密数据执行的操作,您还可以查看一些模块:我对 Crypt::OpenPGP 有很好的体验(尽管是纯 Perl,速度很慢),以及 Crypt::PGPSimple 看起来它可以使用外部 gpg 可执行文件做你想做的事。