2010-06-09 59 views
5

我使用makecert以下參數創建一個X509證書X509證書:創建的OpenSSL/makecert工具

makecert -r -pe -n 「CN =客戶」 -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創建證書,它也是對我有效的答案。

+0

創建證書時您指定的私鑰/公鑰對的位是什麼? 可能你必須指定更長的鍵4048位? – berkay 2010-06-09 17:56:38

+0

我不確定你在說什麼選項。我只是使用了我在makecert命令中顯示的選項。如果你正在談論另一個人,則假定默認值。但我的公鑰有1024位。 – 2010-06-09 18:00:57

+0

好,然後我從來沒有使用makecert只是搜索來創建它4048 bits.1024位是打破了這個原因,你可以得到錯誤。 – berkay 2010-06-09 18:03:13

回答

3

要允許密鑰用於加密,您應該使用-sky-option。默認的'makecert`使用AT_SIGNATURE密鑰規範,這不適用於加密/解密。相反,有它通過發出以下命令使用AT_KEYEXCHANGE規格:

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

(記住要刪除以前的鍵或使用其他容器名稱)。

+0

我讀的RSA算法可以用來簽名和加密郵件。只有一個證書密碼和密鑰是不可能的? – 2010-06-10 12:09:31

+1

的AT_KEYEXCHANGE可用於簽名和加密,只要不是周圍的其他方式。 – 2010-06-10 17:29:57