4

我正在尝试X509Certificate2使用以下代码导出证书的公钥:

X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certificateStore.Open(OpenFlags.ReadOnly);
var exportCertificates = certificateStore.Certificates.Find(X509FindType.FindByThumbprint, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", false);
certificateStore.Close();

// Get Base64 string of the public key
byte[] arr = exportCertificates[0].PublicKey.EncodedKeyValue.RawData;
string b64ExportCertificate = Convert.ToBase64String(arr);

// Import the certificate
X509Certificate2 importCertificate = new X509Certificate2(Convert.FromBase64String(b64ExportCertificate));

当我执行最后一行时,会引发以下异常:

System.Security.Cryptography.CryptographicException
Cannot find the requested object

有谁知道如何解决这个问题?

注意:上面的代码示例是“功能性的”,但它是伪代码。实际上,我在一个应用程序中导出证书,然后为了数字签名而传输到另一个应用程序(因此只发送公钥)

4

1 回答 1

8

回答我自己的问题:

问题在于以下行(来自上面的示例):

byte[] arr = exportCertificates[0].PublicKey.EncodedKeyValue.RawData;

这应该是:

byte[] arr = exportCertificates[0].RawData;

这似乎违反直觉,因为它“似乎”包括整个证书而不仅仅是公钥。但是,情况并非如此,此更新可根据需要进行。

于 2011-02-22T13:47:18.783 回答