GPG错误代码2

时间:2011-06-14 21:36:22

标签: php encryption gnupg

GPG总是在结果中返回2。我的代码如下

$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile";

其中outfile是加密数据将被写入的文件,infile是未加密的数据。

我不知道为什么会这样。任何人都可以告诉我有什么问题。感谢。

4 个答案:

答案 0 :(得分:6)

GPG询问您是否要继续使用未签名密钥进行加密。由于没有用户可以输入Y,因此会产生错误。

要解决这个问题,请使用以下开关

--yes--always-trust

答案 1 :(得分:3)

请参阅此邮件:http://lists.gnupg.org/pipermail/gnupg-users/2008-January/032410.html

这似乎是一个许可问题。 gpg正在尝试访问它无法访问的目录,因此它会因致命错误而失败。 (错误代码2)

您可以通过指定带有gpg可写目录的 homedir 指令来解决此问题。像这样:

$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile --homedir /path/to/dir";

来自man gpg的信息:

  

- homedir目录
  将主目录的名称设置为目录

     

如果未使用此选项,则默认为   “〜/ .gnupg”。它没有意义   在选项文件中使用它。这也是   覆盖环境变量   $ GNUPGHOME。

答案 2 :(得分:2)

您还可能想要将密钥添加到可信密钥列表:

gpg.exe --edit-key KEY_NAME
trust
5 (level of trust)
Y
Save

我遇到了--always-trust参数在XP窗口上无法正常运行的问题,这有助于我解决问题。

答案 3 :(得分:1)

我遇到了同样的问题,但对于解码命令

首先,您可以通过将stderr重定向到stdout来获取错误消息。

$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile 2>&1";

然后你可以修改gpg的参数以满足你的需要。因为我有一个用密码加密密码的文件,我不得不添加几个参数。

我从

开始
gpg  -o $out -d $path

但它抱怨说,它无法打开tty,然后使用--no-tty输出一些其他错误,最后用密码和密码解码文件的命令是

gpg --batch --passphrase $pass_phrase --no-tty -o $outfile -d $path_to_encoded_file

我希望这有助于某人。