需要 PGP 版本号吗?

需要 PGP 版本号吗?

ASCII 封装的 GnuPG 数据通常有一个Version标头:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.22 (GNU/Linux)

hQIMAxfkjOs8YMF+AQ//e9yWfwKBddUX/1YfghKfF/xJhuirYmAdxhsLaO5Fj0QJ
yYZUQ6mtBH6L9J0hxfvsfLvH0+28jw//HTd4iAvczW99Qo0jH/BYfZLeMeh3B42J
Ws7iS5WUdhgXrT/EkBO2OkEPjuRbolU7p8XnX6tD/bazeI5FViwyfLb1EBffKYXG
...
-----END PGP MESSAGE-----

如果删除版本行,数据仍然可以正常解密,但会以以下错误消息开始:

gpg: invalid armor header: hQIMAxfkjOs8YMF+AQ/8CZO9fuB8CImJN7Kl7O0n18Uvk+B9wgCBiS0E2ZIr4sjJ\n

为什么要Version包含该字符串?这行额外的信息对任何人都有好处吗?还是在任何地方都需要?

答案1

Version标题纯粹是提供信息;我猜想它是为了更容易发现兼容性错误(例如,如果客户端无法解密 10 条消息,并且所有 10 条消息都是由同一版本制作的)。

但是,您看到的错误消息不是由于缺少 而引起的Version,而是由于缺少空行分隔标头和正文。根据 OpenPGP 封装消息的语法,即使没有标头,仍然需要分隔符,以便解析器知道这hQIMAxfkjOs8...实际上是正文,而不仅仅是一个奇怪的标头。

相关内容