duanbin3021 2018-02-22 23:51
浏览 98
已采纳

Go的openpgp软件包中的PGP密钥铠装编码

I am trying to print a PGP public key in an ASCII armored encoding using Go's openpgp/armor package.

The output I would expect:

-----BEGIN PGP PUBLIC KEY BLOCK-----

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

The output I get:

-----BEGIN PGP PUBLIC KEY BLOCK-----

<first part of base64 encoded bytes of public key>

It only prints the first part of the public key.

The public key is obtained from a local keyring file and processed as follows:

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

Am I using the package incorrectly? Any ideas on how to track the reason for this (in my opinion) wrong output?

  • 写回答

1条回答 默认 最新

  • ds20021205 2018-05-27 20:09
    关注

    Whoops, after putting a bounty on the question I found an answer. Oh well.

    The armor writer must be closed in order to add that end line.

    pubKeyBuf := bytes.NewBuffer(nil)
    pubKeyWriter, err := armor.Encode(pubKeyBuf, openpgp.PublicKeyType, nil)
    checkIfError(err)
    err = e.Serialize(pubKeyWriter)
    pubKeyWriter.Close()
    checkIfError(err)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿