到目前为止,我有:
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)
中)时,将返回一个字节切片。因此,我很难确定字节片本身中的公共密钥和私有密钥。
答案 0 :(得分:0)
私钥是公钥的超集。它始终包含公用密钥。通常,公钥作为证书的一部分存储。
如果您真的想单独获取公钥,则可以从ecdsa公钥结构中获取X
和Y
大整数并存储它们的二进制表示形式。
您可能会从这里的设计回顾中受益。在很多情况下,您无需单独传达公钥。