如何在 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 公钥结构中获取 XY 大整数并存储它们的二进制表示。

在这里回顾一下您的设计可能会让您受益。需要单独传递公钥的情况并不多。

【讨论】:

我需要这样做,因为我需要共享公钥并保密私钥,而两者都是二进制表示。 为什么不将公共存储在证书中? 我该怎么做呢? (没有双关语) 我建议您好好阅读x509 软件包文档。

以上是关于如何在 GoLang 中分离编组的 ecdsa 公钥和私钥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 中存储 ECDSA 私钥

在 Go 中分离单元测试和集成测试

如何使用 golang 将未编组的 JSON 连接到 HTML 页面?

在 Golang 中编组结构时可以跳过 json 标记吗?

在 C# 中传递 IntPtr 指针后,在非托管 C++ 代码中分配数组,编组类型

是否有一个包可以在 golang 中编组进出 x-www-form-urlencoding