登录
首页 >  Golang >  Go问答

获得 ED25519 Go 私钥对应的公钥

来源:stackoverflow

时间:2024-03-12 16:54:27 498浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《获得 ED25519 Go 私钥对应的公钥》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在尝试使用 ed25519 和 go 从私钥中提取公钥。

我将私钥字节值传递到我的方法中,从中创建一个新的 ed25519 私钥结构,然后使用 .public() 方法检索公钥。

pk := ed25519.PrivateKey(privateKey).Public()
cpk, ok := pk.(ed25519.PublicKey)
if !ok {
    return nil, errors.New("problem casting public key to ed25519 public key")
}

它没有错误,但生成的公钥字节始终为空,在创建私钥结构时我是否做错了什么?


解决方案


ed25519 包的概述中包含以下重要注释:

...与 rfc 8032 的表述不同,此包的私钥 表示包括公钥后缀以进行多重签名 使用相同的密钥进行操作更加高效。这个包指的是 rfc 8032 私钥作为“种子”。

这意味着它使用以下等效项和术语:

  • rfc 8032 私钥:32 字节,在此包中称为“种子
  • rfc 8032私钥和公钥串联:64字节,在本包中称为“私钥

如果您已经有一个由 rfc 8032 <private key><public key> 组成的 64 字节切片,则可以使用问题中的代码。

如果您只有由 rfc 8032 < 私钥 > 组成的 32 字节切片,则需要按如下方式计算公钥:

// Compute the full 64 byte <private key><public key> from the private key
priv := ed25519.NewKeyFromSeed(32bytePrivateKey)

// Print out the public key (the last 32 bytes)
fmt.Println(priv.Public())

请注意ed25519.privatekeyed25519.publickey 都是 type []byte

理论要掌握,实操不能落!以上关于《获得 ED25519 Go 私钥对应的公钥》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>