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",....)
。否则,如果 rept
或 myfile
由用户输入确定,您可能会冒代码执行的风险。
除了 Jens Erat 提到的系统帐户问题之外,通过 --homedir
参数向所需 gpg 配置添加显式绝对路径可能会有用。可能是 Windows 版本的 gpg 在这方面有点残缺,如果从不同的目录启动则无法找到密钥。
根据您想对加密数据执行的操作,您还可以查看一些模块:我对 Crypt::OpenPGP
有很好的体验(尽管是纯 Perl,速度很慢),以及 Crypt::PGPSimple
看起来它可以使用外部 gpg 可执行文件做你想做的事。
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",....)
。否则,如果 rept
或 myfile
由用户输入确定,您可能会冒代码执行的风险。
除了 Jens Erat 提到的系统帐户问题之外,通过 --homedir
参数向所需 gpg 配置添加显式绝对路径可能会有用。可能是 Windows 版本的 gpg 在这方面有点残缺,如果从不同的目录启动则无法找到密钥。
根据您想对加密数据执行的操作,您还可以查看一些模块:我对 Crypt::OpenPGP
有很好的体验(尽管是纯 Perl,速度很慢),以及 Crypt::PGPSimple
看起来它可以使用外部 gpg 可执行文件做你想做的事。