删除“BEGIN”和“END PGP MESSAGE”字符串会使解密中断

时间:2016-05-04 15:55:53

标签: c# gnupg openpgp

我使用以下命令使用GnuPG加密纯文本:

gpg2.exe --encrypt --armor --recipient <<recipient>>

这将输出返回为

-----BEGIN PGP MESSAGE-----Version: GnuPG v2hQEMAzFXJ94q1Nm8AQf/Tld0/3dAvgFKPQVBS8bmbXChXeApeReo1ydNS+OXeIYwZOwld8ykP3G5EzfxNin2CRpcdgGu7mUFQfd5H80TVjVsCGrlT+0fhOsUrh3P3mTxl9CExVtz0R2e8Ot5aibAMXA5EsAZSJJF0IULCCWSeD49FhwTYWkOZVKrTJ6SKyRU65MLT2sEKb4Bh7EddiK2hmJ4vQx1uJYbeR+rdbyEBKPRHXy1WfJO24KBqSL3e7X1eFNfBiwUU7T1pabLtuCffdNDdBA1EOAPfUgFJi0NPaL0j5eJq2Lqpmoe62EPROIfvEr5b533d4FSHRCiH3Y8Hvea/TXaYYj5i9Ccj3K5VtJlAepwPKN16nT2BLwMPwgMPRdSMfd07g0IxPOq2WarAbgapJkJHyDetE7qWThgmMqxaiCi9mdtdkmAICZnVkDuA+f85kHpESS/WIf0o6v5l69JsHUkgfVJpsJ1FccY6gatfnML38c==DbOJ-----END PGP MESSAGE-----

现在,当我解密相同的字符串时,它正在解密,但是当我从此字符串中删除-----BEGIN PGP MESSAGE-----Version: GnuPG v2-----END PGP MESSAGE-----时,会返回以下错误消息:

gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: Unknown system error

任何想法?

1 个答案:

答案 0 :(得分:2)

RFC 4880, OpenPGP, 6.2. Forming ASCII Armor定义的OpenPGP ASCII装甲消息格式严格要求-----BEGIN PGP MESSAGE----------END PGP MESSAGE-----字符串。你不应该删除它们,像GnuPG这样的OpenPGP实现不再将它们识别为ASCII装甲的OpenPGP消息(这就是为什么GnuPG打印gpg: no valid OpenPGP data found.)。

版本标题行Version: GnuPG v2是可选的,可以删除。甚至可以配置GnuPG,因此它不会在第一时间添加它。

您可能会将二进制OpenPGP消息格式与某种没有这些字符串的ASCII装甲消息格式混淆。二进制消息格式包含普通的OpenPGP消息。由于二进制数据在早期的电子邮件中存在问题,因此定义了ASCII装甲编码。您可以将它与Base64编码进行比较(因此只保留基本的ASCII字符),并添加您观察到的字符串,以便人类可以更轻松地识别OpenPGP消息。