作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
最佳答案
ecdsa.PrivateKey
是一个结构:
type PrivateKey struct {
PublicKey
D *big.Int
}
因此 privkey.D.Bytes()
返回给您 D
大整数的字节。
同样,ecdsa.PublicKey
:
type PublicKey struct {
elliptic.Curve
X, Y *big.Int
}
您可以对 pubkey.X
和 pubkey.Y
字段执行相同的操作。这些将为您提供 2 个单独的 byte slice 。如果您需要将它们合并为一个,则需要提出某种“格式”,例如使用 4 个字节编码第一个 slice 的长度(pubkey.X.Bytes()
的结果),然后是第一个 slice ,然后是第二个 slice 的长度(同样是 4 个字节),最后第二个 slice 本身。
最好是使用 elliptic.Marshal()
为此功能:
func Marshal(curve Curve, x, y *big.Int) []byte
Marshal converts a point into the uncompressed form specified in section 4.3.6 of ANSI X9.62.
使用示例:
var pubkey *ecdsa.PublicKey = // ...
data := elliptic.Marshal(pubkey, pubkey.X, pubkey.Y)
关于go - 如何从 PublicKey 生成字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52502511/
我是一名优秀的程序员,十分优秀!