我经常使用 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
文本文件,然后解压缩并以明文形式输出。Atest
Atest.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 有其自身的漏洞,因此从不受信任的来源解压文件总是存在一定的风险,尤其是使用旧软件时。