2011-10-24 72 views
2

我編寫的應用程序必須從用戶那裏獲取私鑰,然後將其作爲base64發送給另一個應用程序,我希望允許用戶使用私鑰插入X509Certificate2。 現在我的大問題是如何將私鑰從AsimetricAlgorithm對象轉換爲包含所有私鑰的綁定數組? 我看到我可以使用openSSL - 將所有證書轉換爲pem文件,然後轉換爲RSA文件 - 並讀取私鑰,但我不想使用它,因爲:我不想使用文件,3P庫,它是不安全等.. 有沒有人知道另一種方式來做到這一點?將私鑰作爲字節數組導出的最佳方式

在此先感謝!

回答

3

AsymmetricAlgorithm對象您從X509Certificate2意志其實PrivateKey財產得到來自AsymmetricAlgorithm派生的各類之一的實例,如RSACryptoServiceProviderDSACryptoServiceProvider等..

您需要確定你正在處理的私鑰的類型,並適當地轉換它。一旦投射,您應該能夠撥打ExportCspBlob(true)獲取私鑰數據。

實例(假設一個RSA密鑰):

public string GetRSAPrivateKeyBase64(X509Certificate2 certificate) 
{ 
    var privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 
    if (privateKey == null) throw new Exception("Not an RSA private key"); 
    // Export the CSP blob, including private key parameters 
    var cspBlob = privateKey.ExportCspBlob(true); 
    return Convert.ToBase64String(cspBlob); 
} 
+0

感謝,它似乎美妙的解決方案,但是,我在PEM文件的源私鑰,當我嘗試比較高炮這兩個鍵,我看到他們是不同的......我不知道.NET framwork如何導出blob,你有時使用這種方法嗎?你能向我解釋它是如何工作的嗎? – RRR

+0

CSP blob是可用於ImportCspBlob函數初始化加密對象的密鑰集的特定於Windows的二進制表示形式。這不是關鍵的PEM表示。看來你的問題需要更多的細節,以確定你想要達到什麼樣的目標,如果你想得到一個有用的答案。 – Iridium

相關問題