我正在使用 gpg 来解密供应商发送给我的文件。当加密文件的内容为空时,一切正常(供应商告诉我有问题的文件中没有内容)。
如果我尝试解密这些文件之一,我会得到:
gpg: 无法处理这种模棱两可的签名数据
有什么方法可以检查文件是否没有内容接受标题,以便我可以将其设置为更优雅地失败?
我正在使用 gpg 来解密供应商发送给我的文件。当加密文件的内容为空时,一切正常(供应商告诉我有问题的文件中没有内容)。
如果我尝试解密这些文件之一,我会得到:
gpg: 无法处理这种模棱两可的签名数据
有什么方法可以检查文件是否没有内容接受标题,以便我可以将其设置为更优雅地失败?
根据这个邮件列表帖子,官方 PGP 工具有一个错误,有时会导致它产生格式错误的消息。gpg --list-packets path/to/encrypted/file.pgp
您可以通过运行并查看输出来验证您的特定文件是否属于这种情况。如果您看到 a:onepass_sig packet:
紧随其后的是 a:signature packet:
那么这可能就是正在发生的事情。
根据我的(有限)经验,如果发件人试图加密一个空文件,就会发生这种情况。不幸的是,由于加密的设计目的是让人很难看到里面的东西,所以在你尝试解密之前很难判断这是否真的是这样。gpg 的--list-packets
输出将为您提供一些信息,但我注意到:literal data packet:
即使消息包含非空文件,输出通常也会显示“原始数据:0 字节”。
您可以使用该选项使 gpg 忽略加密文件中的所有签名数据--skip-verify
,但是当然您无法判断您正在解密的文件是否来自受信任的来源。
假设您使用的是 unix shell 脚本,您可以在尝试 GPG 解密之前先执行 '[ -s /the/file ]'。