簡體   English   中英

如何從X509證書初始化ECDiffieHellmanCngPublicKey

[英]How to initialize ECDiffieHellmanCngPublicKey from an X509 Certificate

我想從X509證書的公共密鑰初始化ECDiffieHellmanCngPublicKey(該證書是使用ECDH_P384模板頒發的)。 這是我嘗試過的:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly);
var cert = store.Certificates.Find(X509FindType.FindByTemplateName, "ComputerECC", true)[0];
var keyType = new byte[] { 0x45, 0x43, 0x53, 0x33 };
var keyLength = new byte[] { 0x30, 0x00, 0x00, 0x00 };
var key = cert.PublicKey.EncodedKeyValue.RawData.Skip(1);
var keyImport = keyType.Concat(keyLength).Concat(key).ToArray();
var pubKey = ECDiffieHellmanCngPublicKey.FromByteArray(keyImport, CngKeyBlobFormat.EccPublicBlob);

最后一行拋出System.Security.Cryptography.CryptographicException:“與ECDiffieHellmanCng算法一起使用的密鑰必須具有ECDiffieHellman算法組。

使用魔術值解析密鑰的想法來自這個問題,我懷疑證書模板中缺少某些內容。

模板沒有錯。 問題實際上與密鑰類型有關。

var keyType = new byte[] { 0x45, 0x43, 0x53, 0x33 };

實際上應該是

var keyType = new byte[] { 0x45, 0x43, 0x4B , 0x33 };

您提供的密鑰類型是ECDSA公鑰(BCRYPT_ECDSA_PUBLIC_P384_MAGIC),而不是ECDH公鑰(BCRYPT_ECDH_PUBLIC_P384_MAGIC),如參考答案所示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM