2009-11-12 49 views

回答

3

做到這一點外部庫最簡單的方法,是使用(免費)Chillkat Public/Private Key Component:使用,導入密鑰可以使用just a few lines of code做,如果你願意支付的$ 149或使圖書館的其餘部分,它也會使處理一般的密碼概念變得更容易。

而且不像正規的Microsoft .NET Framework,Mono項目確實似乎有一個PKCS8 implementation爲其full C# source是可用的。這可能適合作爲一個起點,以防萬一你絕對不能依賴外部庫,假設(LGPL 2.0)與Mono代碼相關的許可證適用於你...

最後,PKCS #8 format不是太難以解析,並且RSA/DSA密鑰對對象根據PKCS #11,並且一旦找出所有位都去了,相對容易轉換爲.NET X509Certificate - 我在前段時間在VB.NET中實際執行了這一操作,但不幸的是我沒有能夠共享該代碼。

+0

我需要免費和開源的東西。但是,謝謝你的幫助。 – Makah

+0

我確信它很容易做到,但我不想這樣做。這就是爲什麼我有這個圖書館。簡單,開源和免費。 – Makah

+0

經過您的編輯,我同意你的意見。 – Makah

1

感謝您的回答。

我的腳本來創建RSA密鑰我使用OpenSSL的白衣:

(Linux的腳本)

openssl genrsa -out ${NAME}_openssl.key 2048 
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key 
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER 

在C#中,我們需要專用密鑰以XML格式。我用this解析器來做到這一點。

要解密德的挑戰,我們需要使用:

byte[] challange = server.getChallenge(); 

    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(); 

    rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey); 

    byte[] plaintext = rsaProvider.Decrypt(challange, false); 

要加密絲毫服務器證書,我們需要使用:

RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider; 

    byte[] answer = RsaProvider.Encrypt(plaintext, false); 

感謝JavaScience諮詢