如何在 GoLang 中分离编组的 ecdsa 公钥和私钥
Posted
技术标签:
【中文标题】如何在 GoLang 中分离编组的 ecdsa 公钥和私钥【英文标题】:How to separate marshalled ecdsa public and private keys in GoLang 【发布时间】:2018-11-24 07:45:40 【问题描述】:到目前为止,我有:
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
中,当我使用x509.MarshalECPrivateKey(key)
编组密钥对数据(存储在*ecdsa.PrivateKey
中),返回单字节切片。因此,我无法确定字节片本身中的公钥和私钥。
【问题讨论】:
【参考方案1】:私钥是公钥的超集。它始终包含公钥。通常,公钥作为证书的一部分存储。
如果你真的想自己获取公钥,你可以从 ecdsa 公钥结构中获取 X
和 Y
大整数并存储它们的二进制表示。
在这里回顾一下您的设计可能会让您受益。需要单独传递公钥的情况并不多。
【讨论】:
我需要这样做,因为我需要共享公钥并保密私钥,而两者都是二进制表示。 为什么不将公共存储在证书中? 我该怎么做呢? (没有双关语) 我建议您好好阅读x509
软件包文档。以上是关于如何在 GoLang 中分离编组的 ecdsa 公钥和私钥的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 golang 将未编组的 JSON 连接到 HTML 页面?