【问题标题】:How to separate marshalled ecdsa public and private keys in GoLang如何在 GoLang 中分离编组的 ecdsa 公钥和私钥
【发布时间】: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 中),返回单字节切片。因此,我无法确定字节片本身中的公钥和私钥。

【问题讨论】:

    标签: go encryption public-key-encryption ecdsa


    【解决方案1】:

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

    如果你真的想自己获取公钥,你可以从 ecdsa 公钥结构中获取 XY 大整数并存储它们的二进制表示。

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

    【讨论】:

    • 我需要这样做,因为我需要共享公钥并保密私钥,而两者都是二进制表示。
    • 为什么不将公共存储在证书中?
    • 我该怎么做呢? (没有双关语)
    • 我建议您好好阅读x509 软件包文档。
    猜你喜欢
    • 2018-07-19
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多