我尝试使用openpgpjs和openpgp server设置gpg密钥生成器/经理网络。 我能够毫无困难地生成密钥对,但是当我想将装甲公钥发送到pks时,我收到一个错误:"解码密钥块时出错#34;。
经过几次尝试(使用url编码,没有url编码,通过Ajax请求或直接在pks'表单上复制/粘贴...),我决定尝试在GnuPG中导入它:它工作了!
然后我尝试从GnuPG导出密钥并将结果复制到pks的形式,它也有效。 所以我试着比较导入的文件和导出的文件,期望一些CR + LF是不同的。我很惊讶整个ASCII装甲键是不同的。
所以我有两个问题:
答案 0 :(得分:2)
如@owlstead所述,这两个应用程序正在使用不同版本的开放式PGP协议。 Openpgpjs使用新格式提供ASCII装甲密钥,而pks只接受旧格式。
您需要解码密钥的第一个字节才能注意到它: 取密钥的前2个字母并使用radix-64 table获取二进制值,然后检查前8位(一个字节)。
第一位总是一位,第二位也应该是一位(这意味着它是一个新包),然后以下是与ASCII装甲内容相对应的二进制值:
在旧格式中,二进制值以4位(位5到2)编码,在新格式中,它位于6位(从5到0)。
更多细节可以在RFC 2440第4章找到。
答案 1 :(得分:0)
某些PGP数据包可以交换,例如,如果您有一个以上的非主UID或一个以上的子密钥。接下来,有一种新的数据包格式,它也导致了不同的ASCII装甲。最后但并非最不重要的一点是,签名数据包包含哈希值的左两个字节,不再检查这些字节。如果您进行更改,则在查看时几乎不会检测到更改,但是最后的CRC24和将更改。