如何在Go中转换数据类型ECDSA私钥



我正在使用ecdsa。GenerateKey方法在Go中生成私钥对。我想用套接字编程发送我的私钥(priva(,并且可以从其他程序中读取其他私钥(privab(。

priva, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
_, err = connection.Write([]byte(priva))
buffer := make([]byte, 1024)
mLen, err := connection.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
}
privb := buffer[:mLen]

我有代码可以向其他程序发送数据和从其他程序读取数据,但我不能发送我的私钥(priva(,因为它不能更改类型。如何修复,或者有推荐的发送/读取数据的方法吗?

*ecdsa.PrivateKey不能直接通过网络发送。必须首先将其编组为[]byte

可以使用x509.MarshalECPrivateKey封送为DER格式,使用x509.ParseECPrivateKey取消封送。

例如:

package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"crypto/x509"
"fmt"
)
func main() {
priv, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
derBuf, _ := x509.MarshalECPrivateKey(priv)
// Transfer []byte to new location.
privCopy, _ := x509.ParseECPrivateKey(derBuf)
fmt.Println(priv.Equal(privCopy))
/// Output: true
}

注意:这个例子没有提供任何关于私钥的额外安全性。您可能需要确保传输/协议处理适合您的安全需求。

最新更新