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

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

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

gpg -o XXX --decrypt XXX.gpg
RETVAL=$?
if [ RETVAL -ne 0 ]; then
    exit 1
fi

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

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

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

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

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1023 bits
    data    1024 bits

gpg 解密导致错误,日志如下:

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1022 bits
    data    1022 bits

这是什么意思?为什么密钥位不相同仍能正确解密?请注意,用于解密这两个文件的密钥 ID 和密码是相同的。另外,有谁知道解释 gpg.dll 错误的详细资源吗?

答案1

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

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

--status-fd <file descriptor>识别错误的正确方法是解释or的输出--status-file <filename>

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

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

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

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

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

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

来自 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.

您也可以使用这个关联了解更多有关此的信息。

答案2

在linux中使用status-fd的一种方法如下:

GPG="${PGP_LOCATION}gpg --status-fd 2 --passphrase-fd 0 --no-verbose --batch --output ${OUTPUT} --decrypt ${DOUTPUT}"
echo "GPG:${GPG}"
${GPG} 2>&1 >> ${STATUS} < ${PASSFILE}

请注意,所有 shell 变量都设置为指向正确的值。 gpg 的输出被捕获在${STATUS} (一个文件)...

相关内容