从ECDSa证书中提取私钥

时间:2019-03-14 11:17:16

标签: c# ecdsa cng

我已经使用openssl创建了一个自签名的ECDSA证书。我需要获取它的私钥信息和证书信息(以base64字节为单位)。后者很容易。第一个似乎很困难。我知道我做错了,因为私钥的长度为256。我知道了它的长度,因为我已经创建了它,并使用以下命令验证了它:

openssl ec -in C:\OpenSSLx64\flir\newcerts\ecd.key.pem  -text -noout

我所有的尝试都产生不同的字节长度。他们在这里:

X509Certificate2 certificate = new X509Certificate2(certificateBytes, password, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.EphemeralKeySet);
if (certificate.GetECDsaPrivateKey() is ECDsaCng ecdKeyWrapper)
{
    CngKey key = ecdKeyWrapper.Key;
    key.SetProperty(pty);
    ECParameters parameters = ecdKeyWrapper.ExportParameters(true);
    privateKey = parameters.D;
    byte[] otherPKey = key.Export(CngKeyBlobFormat.GenericPrivateBlob);
    byte[] otherPKey2 = key.Export(CngKeyBlobFormat.EccPrivateBlob);
    byte[] otherPKey3 = key.Export(CngKeyBlobFormat.EccFullPrivateBlob);
    byte[] otherPKey4 = key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
}

我知道使用RSA和DSA可以使用bouncyCastle,但是在这里无法使用:

keyPair = DotNetUtilities.GetKeyPair(dsaKeyWrapper);

所以我想我有两个问题:

  1. 我无法正确提取私钥。
  2. 我已经读过私钥应该定义为D。显然,私钥不是(大小不合适)。那么在这种情况下D是什么?

0 个答案:

没有答案