如何封送ECC公钥或私钥

您好,我正在尝试解组包含ECC公钥的对象 但是我错误地说不能正确地对物体进行编组。 我正努力做后续工作:

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结构字段PublicKey.elliptic.Curve类型的曲线

并且eliptoc或509x函数都无法执行umarshal,并且曲线值始终为空

chejixian 回答:如何封送ECC公钥或私钥

我终于找到了答案,如果有人需要它,我会把它发布出去。 我们所需要做的只是创建另一个结构,将其命名为“ retrieve”,并声明它将从解组器中读取的值。 现在ECC公钥包含3个值“ curve”,并将其附加为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公众解组。

本文链接:https://www.f2er.com/3108592.html

大家都在问