2013-03-26 68 views
0

我可以創建服務器和客戶端的非對稱密鑰,然後導出它們並嘗試交換它們。我的問題,我一直無法找到解決方案是,我想要將服務器的公鑰導入到客戶端程序。這是作爲一個字節[],但我需要能夠使用它作爲一個RSAParameters能夠加密數據去服務器。如何將字節[]轉換爲RSAParameters類型?如何在C#中導入公鑰?

private void secureButton_Click(object sender, EventArgs e) 
     { 
      clientRSA = new RSACryptoServiceProvider(); 
      byte[] clientPublicKey = clientRSA.ExportCspBlob(false); 

      stm.Write(clientPublicKey, 0, clientPublicKey.Length); 
      stm.Read(serverPublicKey, 0, serverPublicKey.Length); 
     } 

我知道,這是不是這樣,由於易受中間人的「安全」的方式,但我反對硬學校期限跑起來,這是我需要得到一個磚牆在我可以繼續前進之前。

任何幫助,將不勝感激。提前致謝。

+0

我從來沒有做過blob,但我通常使用'RSACryptoServiceProvider.ToXMLString()'導出到XML中。然後,我將該XML放入應用程序的資源中,然後在將來使用'RSACryptoServiceProvider.FromXMLString()'將這些參數加載回去。您沒有安全的公用密鑰。它是公開的。 – Pete 2013-03-26 20:29:59

+0

謝謝皮特,這工作很好,讓我在磚牆上。第一次搞亂了RSACryptoServiceProvider,所以感謝幫助。 – Chris 2013-03-27 21:58:09

回答

4

我會繼續前進,使這個答案,那麼:

我從來沒有做過的斑點,但我通常做的是使用RSACryptoServiceProvider.ToXMLString()導出成XML。然後我將該XML放入應用程序的資源中,然後在將來使用RSACryptoServiceProvider.FromXMLString()加載關鍵參數。

您不必保護公用密鑰。它是公開的

2

要將byte []公鑰轉換爲RSAParameters,可以使用相同的類,RSACryptoServiceProvider;

byte[] clientPublicKey = ... 
var provider = new RSACryptoServiceProvider(); 
provider.ImportCspBlob(clientPublicKey); 
var parameters = provider.ExportParameters(false);