如何在GoLang中分离编组的ecdsa公钥和私钥

时间:2018-11-24 07:45:40

标签: go encryption public-key-encryption ecdsa

到目前为止,我有:

key, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
if err != nil {
    os.Exit(-1)
}
marshalled, err := x509.MarshalECPrivateKey(key) // marshalls data to byte stream
if err != nil {
    os.Exit(-1)
}

基本上,我遇到的麻烦与以下事实有关:生成密钥对时,密钥对存储在*ecdsa.PrivateKey中,而公钥存储在*ecdsa.PrivateKey.PublicKey中,当我使用*ecdsa.PrivateKey编组密钥对数据(存储在x509.MarshalECPrivateKey(key)中)时,将返回一个字节切片。因此,我很难确定字节片本身中的公共密钥和私有密钥。

1 个答案:

答案 0 :(得分:0)

私钥是公钥的超集。它始终包含公用密钥。通常,公钥作为证书的一部分存储。

如果您真的想单独获取公钥,则可以从ecdsa公钥结构中获取XY大整数并存储它们的二进制表示形式。

您可能会从这里的设计回顾中受益。在很多情况下,您无需单独传达公钥。