当前位置: 首页 > 知识库问答 >
问题:

从专用ED25519获取公钥Go

太叔岳
2023-03-14

我正在尝试使用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")
}

它没有出错,但生成的公钥字节总是空的,在创建私钥结构时是否有错误?

共有1个答案

哈和惬
2023-03-14

ed25519软件包在概述中有以下重要注释:

... 与RFC 8032的公式不同,这个包的私钥表示包含一个公钥后缀,以使使用同一密钥的多个签名操作更高效。该包将RFC 8032私钥称为“种子”。

这意味着它使用以下等同物和术语:

  • RFC 8032私钥:32字节,在这个包中称为“种子”
  • RFC 8032私钥和公钥相关:64字节,在这个包中称为“私钥”

如果您已经有一个由RFC 8032组成的64字节片

如果您只有一个由RFC 8032

// 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。和ed25519.PublicKey都是类型[]byte

 类似资料:
  • 问题内容: 我记得很久以前使用OpenSSL进行过此操作,但是我想知道是否可行以及如何进行,我从未在Java上使用过密码学。 问题答案: 您不能直接从另一个生成任何一个密钥。从数学上讲这是不可能的。如果你有一个含有密钥团 两者 的公钥和私钥,你可以提取它们的相对轻松的任何一个。 编辑,2017年: 多年之后,人们对加密技术有了更深入的了解,现在我很清楚这个答案并不正确。 引用维基百科: 公用密钥由

  • 我从服务器获得了以下jwks 我有一个加密的令牌。我想用上面的jwk解密它。如何从上述jwk中获取公钥。我从楼梯上走下来https://auth0.com/docs/quickstart/backend/rails/01-authorization.但上述jwk中缺少x5c(证书)。 我想知道在jwk中没有x5c如何获取公钥。

  • 您可以在AWS KMS中创建非对称密钥对(加密/解密)。当前AWS CLI允许访问公钥(https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kms/get-public-key.html) 我无法在Terraform的KMS资源中看到这一点。是我错过了什么还是这只是在最新版本中还没有,

  • 我正在使用Ruby 2.5.x OpenSSL库研究椭圆曲线。我可以很容易地使用 但是给定一个私钥,我想重新生成公钥。 我知道OpenSSL可以做到这一点,因为命令行允许您这样做,Ruby比特币项目也可以做到这一点。但是Ruby比特币项目使用FFI而不是Ruby提供的接口有自己的OpenSSL接口。 Ruby 2.5.x openssl 库是否没有公开足够的 OpenSSL 接口,以便能够从私钥生

  • 说明 微信支付-获取RSA加密公钥SDK,企业付款到银行卡接口需要。 你还需要执行openssl rsa -RSAPublicKey_in -in weixin-rsa-public.pem -pubout 将命令行输出的证书内容覆盖到weixin-rsa-public.pem文件中才可使用 官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch

  • 我已经阅读了如何在OpenSSL中从ECDSA私钥获取公钥? 并想做同样的事情,但在Java中与充气城堡。 我也见过Bouncy Castle ESCDA从私钥创建公钥,但这并没有帮助。