让人无奈的PGP Desktop 9

今天一个同事让我把我的pgp的public key发给她,因为她有一些重要的东西要加密后通过邮件发送给我。

没有想到的是,我发给她后,她看了下开头的注释,提醒我检查我的pgp是不是9.0以上版本。如果不是的话,将有可能无法正确的解密。

我想了想,无所谓吧?我用的是seahorse这种很傻瓜化的软件,但是采用的标准和算法都是统一的啊,1024位的DSA,嗯……我让她先给我发封测试邮件看看。

结果是,解密失败。

Could not parse S/MIME message
gpg: ASCII 封装头:Version: PGP Desktop 9.0.1 (Build 2185) - not licensed for commercial use:
gpg: 无效的 ASCII 封装头:www.pgp.com
gpg: 跳过无效的 64 进制字符 2e
gpg: 跳过无效的 64 进制字符 2e
gpg: CRC 错误:b6fdba - 7cbf96
gpg: packet(3) with unknown version 41

?? 问题出在哪里了呢?

后来我终于发现,我们公司大部分人使用的都是windows下的未付费版的PGP Desktop 9。它会在VERSION一栏长长的写明你是没掏钱的用户。

-----BEGIN PGP MESSAGE-----
Version: PGP Desktop 9.0.1 (Build 2185) - not licensed for commercial use:
www.pgp.com

正文信息
-----END PGP MESSAGE-----

不幸的是, "Version: PGP Desktop 9.0.1 (Build 2185) - not licensed for commercial use:www.pgp.com"这一行文字的长度大于了78个字符(谁叫你不掏钱呢)。而按照rfc2822的标准,邮件正文中一行的长度不应该(should not)超过80个字符(包括回车换行字符在内),也不能(must not)超过1000个字符(包括回车换行字符在内)。

邮件客户端就对这行"超长 "的语句做了折行处理。可惜这样处理过后,文本的格式就乱了。 www.pgp.com成了单独的、无法识别的一行。这导致后面的信息在处理的过程中集体出了错。

解决方法:

打开邮件的原始代码,把 PGP Message 部分copy出来,然后把version行后面一行那个"www.pgp.com"整行删除。

然后调用gpg -d 或者其它的命令解开。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥