gpt4 book ai didi

json - 如何编码 ECC 公钥或私钥

转载 作者:行者123 更新时间:2023-12-01 22:37:24 26 4
gpt4 key购买 nike

您好,我正在尝试解码包含 ECC 公钥的对象
但我去 umarshaling 错误说不能正确解码对象。
我正在尝试执行以下操作:

var privateKey *ecdsa.PrivateKey
var publicKey ecdsa.PublicKey
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
log.Fatalf("Failed to generate ECDSA key: %s\n", err)
}
publicKey = privateKey.PublicKey

marshalledKey, err := json.Marshal(publicKey)
if err != nil {
panic(err)
}

var unmarshalledKey ecdsa.PublicKey
err2 := json.Unmarshal(marshalledKey, &unmarshalledKey)
if err2 != nil {
panic(err2)
}

从(err2)返回的错误是:

panic :json:无法将对象解码到 Go struct 字段 PublicKey.Curve 类型为 elliptic.Curve

并且在 eliptoc 或 509x 函数中都无法进行 umashal 并且曲线值始终为空

最佳答案

我终于找到了答案,我会发布它以防有人需要它。
我们所需要的只是创建另一个结构,让我们将其命名为“retrieve”并声明它将从 unmarshal 读取的值。
现在 ECC 公钥包含 3 个值“曲线”并将其附加为 json:"Curve" , "Y"ans 将其附加为 json:"Y"我们将为“X”做同样的事情

它会像这样工作:

type retrieve struct {
CurveParams *elliptic.CurveParams `json:"Curve"`
MyX *big.Int `json:"X"`
MyY *big.Int `json:"Y"`
}

//UnmarshalECCPublicKey extract ECC public key from marshaled objects
func UnmarshalECCPublicKey(object []byte) (pub ecdsa.PublicKey) {
var public ecdsa.PublicKey
rt := new(retrieve)

errmarsh := json.Unmarshal(object, &rt)
if errmarsh != nil {
fmt.Println("err at UnmarshalECCPublicKey()")
panic(errmarsh)
}

public.Curve = rt.Key.CurveParams
public.X = rt.Key.MyX
public.Y = rt.Key.MyY
mapstructure.Decode(public, &pub)

fmt.Println("Unmarshalled ECC public key : ", pub)
return
}

我们将经过编码的公钥传递给 UnmarshalECCPublicKey(),它将返回正确的未编码 obj

所以coorect使用将是:
var privateKey *ecdsa.PrivateKey
var publicKey ecdsa.PublicKey
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
log.Fatalf("Failed to generate ECDSA key: %s\n", err)
}
publicKey = privateKey.PublicKey

marshalledKey, err := json.Marshal(publicKey)
if err != nil {
panic(err)
}

var unmarshalledKey ecdsa.PublicKey
unmarshalledKey = UnmarshalECCPublicKey(marshalledKey)

那应该这样做,您将成功解码 ECC 公众。

关于json - 如何编码 ECC 公钥或私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840982/

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