C# 将ECDSA公钥从CngKey导入BouncyCastle
我正在尝试从CngKey生成的一对密钥生成x509证书。 我使用以下方法创建关键点:C# 将ECDSA公钥从CngKey导入BouncyCastle,c#,bouncycastle,ecdsa,cng,C#,Bouncycastle,Ecdsa,Cng,我正在尝试从CngKey生成的一对密钥生成x509证书。 我使用以下方法创建关键点: var parameters = new CngKeyCreationParameters { Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider, ExportPolicy = CngExportPolicies.AllowPlaintextExport,
var parameters = new CngKeyCreationParameters
{
Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
ExportPolicy = CngExportPolicies.AllowPlaintextExport,
KeyCreationOptions = CngKeyCreationOptions.OverwriteExistingKey,
KeyUsage = CngKeyUsages.AllUsages,
UIPolicy = new CngUIPolicy(CngUIProtectionLevels.None)
};
var key = CngKey.Create(CngAlgorithm.ECDsaP384, container, parameters);
byte[] ecPriKey = key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
byte[] ecPubKey = key.Export(CngKeyBlobFormat.EccPublicBlob);
我通过以下方式获得BouncyCastle私钥:
AsymmetricKeyParameter akPrivate = PrivateKeyFactory.CreateKey(ecPriKey);
string publicKeyBase64 = Convert.ToBase64String(ecPubKey);
byte[] ecPubKey2 = Base64.Decode(publicKeyBase64);
byte[] ecPublicKey = new byte[ecPubKey.Length -7];
ecPublicKey[0] = 0x04;
Array.Copy(ecPubKey, 8, ecPublicKey, 7, ecPublicKey.Length);
AsymmetricKeyParameter akPublic = PublicKeyFactory.CreateKey(ecPublicKey - 1);
我在这方面没有问题,所以我可以从关键点看到正确的曲线参数
但是,当我尝试获取公钥时:
AsymmetricKeyParameter akPrivate = PrivateKeyFactory.CreateKey(ecPriKey);
string publicKeyBase64 = Convert.ToBase64String(ecPubKey);
byte[] ecPubKey2 = Base64.Decode(publicKeyBase64);
byte[] ecPublicKey = new byte[ecPubKey.Length -7];
ecPublicKey[0] = 0x04;
Array.Copy(ecPubKey, 8, ecPublicKey, 7, ecPublicKey.Length);
AsymmetricKeyParameter akPublic = PublicKeyFactory.CreateKey(ecPublicKey - 1);
我读到我必须从CngKey中删除前8位数字,并添加未压缩的常量值0x04。
当我执行“PublicKeyFactory.CreateKey(ecPublicKey)”时,我得到一个异常:
ex {"extra data found after object"} System.Exception {System.IO.IOException}
Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
HResult 0x80131620 int
HelpLink null string
InnerException null System.Exception
Message "extra data found after object" string
Source "BouncyCastle.Crypto" string
StackTrace " at Org.BouncyCastle.Asn1.Asn1Object.FromByteArray(Byte[] data)\r\n at Org.BouncyCastle.Security.PublicKeyFactory.CreateKey(Byte[] keyInfoData)\r\n at Plpm.Csp.Security.KeyTool.SecurityKeyTool.OpGenEc(String[] args) in ..." string
TargetSite {Org.BouncyCastle.Asn1.Asn1Object FromByteArray(Byte[])} System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
Static members
Non-Public members
无论如何,如果我直接使用键执行此操作,我会得到相同的异常,如下所示:
AsymmetricKeyParameter akPublic = PublicKeyFactory.CreateKey(ecPubKey);
有人能告诉我为什么公钥会出错吗
非常感谢你