OpenPGP-en/decryption可以在cmd中工作,但不能在Perl脚本中工作

OpenPGP-en/decryption可以在cmd中工作,但不能在Perl脚本中工作,perl,gnupg,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 key,我确实看到添加了公钥。有人能提供一些关于OpenGPG过程自动化的见解吗?鉴于问题中的信息很少,我只能猜测,

OpenPGP安装正确,功能良好。以下命令适用于Windows cmd:

gpg2 -r rept --encrypt myfile
但是,当我们尝试使用Perl系统调用自动化上述过程时:

system("gpg2 -r rept --encrypt myfile");
我收到以下错误消息:
gpg:rept:skipped:No public key


使用
gpg2--list key
,我确实看到添加了公钥。有人能提供一些关于OpenGPG过程自动化的见解吗?

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


除此之外,请
严格使用;使用警告以便您能够尽早发现此类错误。还应使用
系统的多参数版本
,以便不涉及shell,即
系统(“gpg2”、“-r”、…)
。否则,如果
rept
myfile
是由用户输入决定的,您可能会面临执行代码的风险。

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


除此之外,请
严格使用;使用警告以便您能够尽早发现此类错误。还应使用
系统的多参数版本
,以便不涉及shell,即
系统(“gpg2”、“-r”、…)
。否则,如果
rept
myfile
由用户输入决定,则可能会有代码执行的风险。

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


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

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


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

自动化是在您开发的同一个系统用户下运行的吗?自动化是在您开发的同一个系统用户下运行的吗?事实就是如此。收件人名称实际上是一个电子邮件地址。谢谢你提出的使用严格警告的建议。事实就是这样。收件人名称实际上是一个电子邮件地址。感谢您建议使用strict和warning。我们希望将已安装的Perl模块保持在最低限度。据我所知,即使我们安装了Crypt模块,我们仍然需要OpenGPG软件,对吗?
Crypt::PGPSimple
实际上只是调用外部gpg二进制文件的包装器
Crypt::OpenPGP
在Perl和oesn中所有OpenPGP内容都不需要gpg,但是它有一大堆实现实际加密的依赖项。这确实很有用。非常感谢。我们希望将已安装的Perl模块降至最低。据我所知,即使我们安装了Crypt模块,我们仍然需要OpenGPG软件,对吗?
Crypt::PGPSimple
实际上只是调用外部gpg二进制文件的包装器
Crypt::OpenPGP
在Perl和oesn中所有OpenPGP内容都不需要gpg,但是它有一大堆实现实际加密的依赖项。这确实很有用。我很感激。