【问题标题】:PGP key armored encoding in Go's openpgp packageGo 的 openpgp 包中的 PGP 密钥装甲编码
【发布时间】:2018-08-02 23:50:13
【问题描述】:

我正在尝试使用 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>

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

公钥从本地keyring文件中获取,处理如下:

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)
}

我是否错误地使用了该软件包?关于如何跟踪这个(在我看来)错误输出的原因的任何想法?

【问题讨论】:

  • 虽然我自己找到了答案,但我很乐意将赏金奖励给任何找到更清晰答案的人

标签: go public-key-encryption gnupg pgp openpgp


【解决方案1】:

哎呀,在对这个问题进行赏金之后,我找到了答案。哦,好吧。

armor 编写器必须关闭才能添加该结束行。

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

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多