首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ECDsa或ECDsaCng对象中提取文本私钥和公钥?

如何从ECDsa或ECDsaCng对象中提取文本私钥和公钥?
EN

Stack Overflow用户
提问于 2022-04-05 04:07:49
回答 1查看 1.2K关注 0票数 2

在创建ECDSA对象并试图提取私钥和公钥对象时,它返回一个byte[]。但是,当试图将其转换为字符串时,它给出的输出看起来并不正确。

代码语言:javascript
复制
// Creating the object with default parameters
ECDsa ecdSa = ECDsa.Create(ECCurve.NamedCurves.nistP256);

// Export parameters
ECParameters ecParamters = ecdSa.ExportParameters(true);

// Private Key
byte[] privateKey = ecParamters.D;

// Public key params
ECPoint publicKey = ecParamters.Q;

// Coordinates
byte[] publicKeyX = publicKey.X; // What format? int, double, etc
byte[] publicKeyY = publicKey.Y; // What format? int, double, etc

上面的ECParameters允许访问curveD (private key)Q (public key)

知道在这些字节数组中使用了什么样的格式吗?如何将其转换为字符串格式,例如:PKCS#8的私钥和公钥

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 07:43:30

D只是raw私钥,X和Y是raw公钥的两个坐标。对于P-256来说,每个字节是32个字节。

自.NET Core3.0以来,支持直接导出PKCS#8格式(ExportPkcs8PrivateKey())和SEC1格式(ExportECPrivateKey())的专用ECDSA密钥和X.509格式(ExportSubjectPublicKeyInfo())的公共ECDSA密钥。通过ExportParameters()绕道是不必要的!导出的密钥是经过编码的。

示例:

代码语言:javascript
复制
ECDsa ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP256);

byte[] privatePkcs8Der = ecdsa.ExportPkcs8PrivateKey();
byte[] privateSec1Der = ecdsa.ExportECPrivateKey();
byte[] publicX509Der = ecdsa.ExportSubjectPublicKeyInfo();

从DER到PEM编码的转换非常简单: Base64编码,在每64个字符之后插入一个换行符,并添加格式特定的页眉和页脚。另外,您也可以使用BouncyCastle (例如,PKCS#8通过Org.BouncyCastle.Utilities.IO.Pem.PemWriter):

代码语言:javascript
复制
using Org.BouncyCastle.Utilities.IO.Pem;
using System.IO;
...
StringWriter stringWriter = new StringWriter();
PemWriter pemWriter = new PemWriter(stringWriter);
pemWriter.WriteObject((PemObjectGenerator)new PemObject("PRIVATE KEY", privatePkcs8Der)); // SEC1: EC PRIVATE KEY, X.509: PUBLIC KEY
Console.WriteLine(stringWriter.ToString());

因为.NET 5也直接支持PEM编码,但只支持导入:ImportFromPem()

注意,ECDH和RSA密钥也有类似的支持。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71746201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档