我终于找到了答案,如果有人需要它,我会把它发布出去。
我们所需要做的只是创建另一个结构,将其命名为“ 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