GPG错误码2

8

GPG总是返回结果为2。我的代码如下:

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

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

我不知道为什么会出现这种情况。请问有人能告诉我错在哪里吗?谢谢。

4个回答

10

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

要解决此问题,请添加以下开关

--yes--always-trust


4
请看这条信息: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 directory
将主目录的名称设置为directory。

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


那么目录的路径会是类似于/something/something/.gnupg吗?我还将GNUPGHOME设置为.gnupg文件夹的路径。 - koralarts
2
从链接中:"另外,由于某种原因,直接设置GNUPGHOME不起作用。" 我认为你应该使用--homedir。是的,应该是这样的。但是这个目录需要被你的脚本有写入权限。 - Thiago Silveira
1
我明白了...我需要使用--yes--always-trust,因为它正在请求输入,但由于它是在PHP中,它无法获取该输入,因此会出现错误。 - koralarts
@thiago 我尝试了“yes”和“always-trust”,但没有成功。我现在正在尝试“homedir”方法,但不确定要将其设置为什么...? - Shackrock

3
您可能还希望考虑将密钥添加到受信任的密钥列表中:
gpg.exe --edit-key KEY_NAME
trust
5 (level of trust)
Y
Save

我在XP系统上,使用--always-trust参数时遇到了一些问题,这个方法帮助我解决了问题。


信任级别不仅适用于验证消息/文件签名吗?我认为必须签署密钥,无论是您还是已签署您的密钥的其他人,才能将其用作加密接收者。 - Alastair Irvine

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

我希望这能对某人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接