我正在使用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
}
注意:这个例子没有提供任何关于私钥的额外安全性。您可能需要确保传输/协议处理适合您的安全需求。