gpg 错误代码 2(GPG_ERR_UNKNOWN_PACKET) 是什么意思?

Nap*_*Nap 6 gpg exit-status

我的任务是解释在我的批处理脚本之一中发生的 gpg 错误的变化。目前,当我对指定文件执行 gpg 解密时,它返回 2。问题是当我搜索表单时,它显示文件已被正确解密,但错误代码导致脚本停止,因为它只假设 0是唯一的成功价值。

gpg -o XXX --decrypt XXX.gpg
RETVAL=$?
if [ RETVAL -ne 0 ]; then
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

我在网上搜索并找到了 gpg 的标题列表。它将错误 2 定义为未知数据包。

http://www.gnu-darwin.org/www001/src/ports/security/libgpg-error/work/libgpg-error-1.5/src/err-codes.h.in

显示的正常错误文本是 [gpg: [不知道]: invalid packet (ctb=14)]。未知数据包究竟是什么意思?我正在尝试搜索有关理解错误代码的任何文档。使用 [-vv] 选项显示所有详细信息后。我将生成的 gpg 文件解密与返回 0 代码的文件进行了比较。我唯一注意到的是密钥的字节不同。

没有错误的gpg的解密有以下日志:

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1023 bits
    data    1024 bits
Run Code Online (Sandbox Code Playgroud)

导致错误的gpg的解密有以下日志:

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1022 bits
    data    1022 bits
Run Code Online (Sandbox Code Playgroud)

这是什么意思?为什么即使密钥位不相同仍然可以正确解密?请注意,用于解密这两个文件的密钥 ID 和密码是相同的。另外,有没有人知道任何关于解释 gpg 错误的详细资源。

The*_*ght 5

广泛使用的 GPF 代码分为三种类型:

  1. 0 表示成功(所有其他值表示失败)。
  2. 2 通常用于意外错误。
  3. 1 对于诸如 BAD 签名之类的东西。

识别错误的正确方法是解释 --status-fd 的输出。

现在对于您正在使用的特定问题,可能有两个原因:

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

要解决此问题,请提供以下开关:

    --yes and --always-trust
Run Code Online (Sandbox Code Playgroud)
  1. 也可能是权限问题。gpg 正在尝试访问它无法访问的目录,因此它失败并出现致命错误。(错误代码 2)

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

   $cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile --homedir /path/to/dir";
Run Code Online (Sandbox Code Playgroud)

来自 man gpg 的信息:

   --homedir directory
   Set the name of the home directory to directory

    If this option is not used it defaults to "~/.gnupg". It does not make sense to    use     this in a options file. This also overrides the environment variable $GNUPGHOME.
Run Code Online (Sandbox Code Playgroud)

您也可以使用此链接了解有关此链接的更多信息。