从“文字数据包”或存储文件中检索数据

从“文字数据包”或存储文件中检索数据

我经常使用 pgp 加密接收数据。通常,如果我gpg --list-packets对某个文件运行,我会将该文件视为“公钥加密包”,然后是有关我的私钥的项目。此时,我会将文件移动到另一个位置进行解密和处理。

最近,我以前收到过文件的一个人发来了一个我无法解密的文件。当我对这些文件运行 list-packets 时,我得到了:

:compressed packet: algo=1
:literal data packet:
     mode t (74),created 1699482604, name="A*****",
     raw data: unknown length

我也尝试过--decrypt,但无法访问原始数据/消息。据我所知,这可能是一个使用相当于命令处理的文件gpg --store。我还没有找到有关如何尝试访问这些文件中的数据的指导。最好使用 GnuPG。我正在使用:

gpg --version
gpg (GnuPG) 2.0.22
libcrypt 1.5.3

有人知道我该如何处理这种文件类型吗?解密、确认签名、访问加密数据。

答案1

OpenPGP 参考文档文件压缩(数据)包(和告诉算法 1 是 ZIP 的 Deflate,如下所示RFC 1951), 和文字数据包,包括t文本类型。

这似乎是经过压缩(更准确地说是放气)但未加密的文本,它会输出对称加密数据包

gpg (GnuPG) 2.4.3在我使用/进行的测试中,这会创建并压缩具有类似结构的libgcrypt 1.10.2文本文件,然后解压缩并以明文形式输出。AtestAtest.gpg

> echo fofoofooofoooofooooofoooooofooooooofoooooooofooooooooo > Atest

> gpg --textmode --store Atest
gpg: enabled compatibility flags:
gpg: writing to 'Atest.gpg'

> gpg --list-packets Atest.gpg
gpg: enabled compatibility flags:
# off=0 ctb=a3 tag=8 hlen=1 plen=0 indeterminate
:compressed packet: algo=1
# off=2 ctb=cb tag=11 hlen=2 plen=68 new-ctb
:literal data packet:
        mode t (74), created 1700552989, name="Atest",
        raw data: 57 bytes

> gpg --decrypt Atest.gpg
gpg: enabled compatibility flags:
gpg: original file name='Atest'
fofoofooofoooofooooofoooooofooooooofoooooooofooooooooo

正如评论中所述,问题unknown length(我从哪里获得未压缩文件的长度)可能只是因为文件大于某个阈值。

如果gpg --decrypt在更新 GPG 及其使用内容后仍失败,则表明文件可能已损坏。我会回顾获取它的方式以获得原始版本。如果没有更好的版本,我会附加一堆00字节(用作 deflate 的填充物)并重试。

请注意,zlib 有其自身的漏洞,因此从不受信任的来源解压文件总是存在一定的风险,尤其是使用旧软件时。

相关内容