我正在尝试使用openpgpjs和openpgp server建立一个gpg密钥生成器/管理器网站。
我能够毫不费力地生成密钥对,但是当我想将装甲的公共(public)密钥发送到pk时,会出现错误:“对密钥块进行解码时出错”。
经过几次尝试(使用url编码,不使用url编码,通过Ajax请求或直接在pks的表单上进行复制/粘贴...),我决定尝试将其导入GnuPG中:它起作用了!
然后,我尝试从GnuPG导出密钥,并将结果以pks的形式复制,它也起作用。
因此,我尝试比较导入的文件和导出的文件,期望某些CR + LF会有所不同。令我惊讶的是,整个ASCII装甲的密钥都不相同。
所以我有两个问题:
最佳答案
如@owlstead所述,这两个应用程序使用的是开放PGP协议(protocol)的不同版本。 Openpgpjs使用新格式提供ASCII铠装密钥,而pks仅接受旧格式。
您需要解码密钥的第一个字节以注意到它:
取密钥的前2个字母,并使用radix-64 table获取二进制值,然后检查前8位(一个字节)。
第一位总是1,第二位也应该是1(这意味着它是一个新数据包),然后下面是与ASCII装甲内容相对应的二进制值:
在旧格式中,二进制值编码为4位(第5至2位),在新格式中,二进制值编码为6位(从5至0)。
可以在RFC 2440第4章中找到更多详细信息。