5

我正在使用带有以下参数的 makecert 创建 x509 证书:

makecert -r -pe -n "CN=Client" -ss MyApp

我想使用此证书通过 RSA 算法加密和解密数据。我希望在 Windows 证书存储中生成证书,一切似乎都很好(它有一个私钥,公钥是一个 1024 位的 RSA 密钥等等..)

现在我使用这个 C# 代码来加密数据:

X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false);
X509Certificate2 _x509 = certs[0];

using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key)
{
    byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello");
    _encryptedData = rsa.Encrypt(dataToEncrypt, true);
}

执行 Encrypt 方法时,我收到带有消息“Bad key”的 CryptographicException。

我认为代码很好。可能我没有正确创建证书。任何意见?谢谢

---------------- 编辑 --------------
如果有人知道如何使用 OpenSsl 创建证书,它对我来说也是一个有效的答案。

4

2 回答 2

4

To allow the key to be used for encryption, you should use the -sky-option. Per default ´makecert` uses the AT_SIGNATURE key specification, which will not work with encryption/decryption. Instead have it use the AT_KEYEXCHANGE specification by issuing the following command:

makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange

(Remember to delete the previous key or use another container-name).

于 2010-06-10T08:14:41.247 回答
1

这是我在尝试查找使用 x509 证书和使用 c# 的 rsa 的 makcert 使用示例时偶然发现的另一个页面,不幸的是它只提供了部分解决方案。我将所有内容放在人们可能感兴趣的博客条目中,可以在这里找到:http: //nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa。 html

于 2011-05-16T23:37:37.043 回答