gpt4 book ai didi

json - 从 JSON Golang 读取 PGP key 时出现 EOF 错误

转载 作者:IT王子 更新时间:2023-10-29 02:19:24 24 4
gpt4 key购买 nike

我正在使用 Golang 开发一个 API,我有一个 JSON 文件 keys.json 如下:

{
"publicKeys": {
"Flex": "<valid pgp public key>",
"Flex2": "<valid pgp public key>"
},
"privateKey": "<valid pgp private key>"
}

为了解码这个,我有以下模型

type PGPKeys struct {
PublicKeys map[string]string `json:"publicKeys"`
PrivateKey string `json:"privateKey"`
}

然后我使用

解码代码
keysJSONFile, err := os.Open(keysPath)
if keysJSONFile != nil {
defer keysJSONFile.Close()
}
if err != nil {
return nil, err
}

keysJSONBytes, err := ioutil.ReadAll(keysJSONFile)
if err != nil {
return nil, err
}

var pgpKeys PGPKeys
err = json.Unmarshal(keysJSONBytes, &pgpKeys)
if err != nil {
return nil, err
}

后来,当我使用 openpgp 获取公钥数据包时,我遇到了 EOF 错误, armor.Decode 返回无法找到任何 block -- 但我不确定为什么会这样

func GetPublicKeyPacket(publicKey []byte) (*packet.PublicKey, error) {
publicKeyReader := bytes.NewReader(publicKey)
block, err := armor.Decode(publicKeyReader)
if err != nil {
return nil, err
}

if block.Type != openpgp.PublicKeyType {
return nil, errors.New("Invalid public key data")
}

packetReader := packet.NewReader(block.Body)
pkt, err := packetReader.Next()
if err != nil {
return nil, err
}

key, ok := pkt.(*packet.PublicKey)
if !ok {
return nil, err
}
return key, nil
}

注意:当我调用该函数时,我使用类似的东西进行类型转换

publicKeyPacket, err := pgp.GetPublicKeyPacket([]byte(h.PGPKeys.PublicKeys[h.Config.PGPIdentifier]))

最后,我尝试将 key 移动到单独的 TXT 文件中并且有效但出于某种原因将它们放在 JSON 中却不行

最佳答案

我在随机尝试时找到了解决方案,我和您( future 的答案阅读者)一样感到惊讶。如果有人可以提供解释,我将不胜感激。

我通过用“\n”替换所有换行符将键存储在 JSON 中,这样我就可以将它存储在一行中。您知道 PGP key 在 -----BEGIN PGP PUBLIC KEY BLOCK----- 之后如何有一个空行吗?好吧,在我的文件中,我有类似

"publicKeys": {
"Flex": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nQfdsf...."
}

添加额外的空行,即将其更改为

"publicKeys": {
"Flex": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nQfdsf...."
}

编辑: 正如@Adrian 在评论中提到的,这是因为如果根据 RFC 规范,该行不再存在,那么它就是一个无效的 PGP key 。这是应该的。

关于json - 从 JSON Golang 读取 PGP key 时出现 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com