Go语言的openpgp包中的PGP密钥装甲编码

9
我将尝试使用Go的openpgp/armor包,以ASCII装甲编码打印PGP公钥。
我期望的输出为:
-----BEGIN PGP PUBLIC KEY BLOCK-----

<base64 encoded bytes of public key>
<checksum>
-----END PGP PUBLIC KEY BLOCK-----

我收到的输出:
-----BEGIN PGP PUBLIC KEY BLOCK-----

<first part of base64 encoded bytes of public key>

它只打印公钥的第一部分。

公钥是从本地密钥环文件中获取并按以下方式处理:

keyRingFileBuffer, err := os.Open(keyRingFilePath)
if err != nil {
    log.Fatal(err)
}
defer keyRingFileBuffer.Close()

keyRing,err := openpgp.ReadKeyRing(keyRingFileBuffer)
if err != nil {
    log.Fatal(err)
}

for _, k := range keyRing {
    w, _ := armor.Encode(os.Stdout, openpgp.PublicKeyType, nil)
    k.PrimaryKey.Serialize(w)
}

我是否错误地使用了这个包?有没有关于如何跟踪导致这个(在我看来)错误输出的想法?


虽然我自己找到了答案,但我很乐意把赏金给任何找到更简洁答案的人。 - user196499
1个回答

3

抱歉,在我对问题进行悬赏后,我找到了答案。好吧。

必须关闭 armor writer 以添加该行的结束符。

pubKeyBuf := bytes.NewBuffer(nil)
pubKeyWriter, err := armor.Encode(pubKeyBuf, openpgp.PublicKeyType, nil)
checkIfError(err)
err = e.Serialize(pubKeyWriter)
pubKeyWriter.Close()
checkIfError(err)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接