【发布时间】:2011-06-14 21:36:22
【问题描述】:
GPG 在结果中总是返回 2。我的代码如下
$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile";
其中 outfile 是要写入加密数据的文件,infile 是未加密数据。
我不知道为什么会这样。谁能告诉我有什么问题。谢谢。
【问题讨论】:
标签: php encryption gnupg
GPG 在结果中总是返回 2。我的代码如下
$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile";
其中 outfile 是要写入加密数据的文件,infile 是未加密数据。
我不知道为什么会这样。谁能告诉我有什么问题。谢谢。
【问题讨论】:
标签: php encryption gnupg
GPG 正在询问您是否要继续使用未签名密钥进行加密。由于没有用户可以输入Y,因此会产生错误。
要解决这个问题,请放置以下开关
--yes 和 --always-trust
【讨论】:
查看此消息:http://lists.gnupg.org/pipermail/gnupg-users/2008-January/032410.html
这似乎是一个权限问题。 gpg 正在尝试访问它无法访问的目录,因此失败并出现致命错误。 (错误代码2)
你可以通过指定一个 homedir 指令和一个 gpg 可写的目录来解决这个问题。像这样:
$cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile --homedir /path/to/dir";
来自man gpg的信息:
--homedir 目录
将主目录的名称设置为目录如果不使用此选项,则默认为 “~/.gnupg”。这是没有意义的 在选项文件中使用它。这也是 覆盖环境变量 $GNUPGHOME。
【讨论】:
/something/something/.gnupg?我还将GNUPGHOME 设置为.gnupg 文件夹的路径
GNUPGHOME 不起作用。”。我认为您应该使用--homedir。是的,它会是这样的。不过,该目录需要可由您的脚本写入。
--yes 和 --always-trust 因为它要求输入,但由于它在 php 中,它没有得到输入,因此它中断了。
您可能还想考虑将密钥添加到受信任的密钥列表:
gpg.exe --edit-key KEY_NAME
trust
5 (level of trust)
Y
Save
我遇到了一些--always-trust参数在XP windows下无法正常工作的问题,这帮助我解决了问题。
【讨论】:
我也遇到了同样的问题,但是对于解码命令
首先,一般来说,您可以通过将 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
我希望这对某人有所帮助。
【讨论】: