2011-10-24 11 views
2

ユーザーから秘密鍵を取得し、別のアプリケーションにbase64として送信する必要があるアプリケーションを作成するときに、ユーザーが秘密鍵でX509Certificate2を挿入できるようにします。 私の大きな問題は、秘密鍵をAsimetricAlgorithmオブジェクトからすべての秘密鍵を含むbate配列に変換する方法です。 私はopenSSlを使うことができることを見ました - すべての証明書をpemファイルに変換してからRSAファイルに変換して秘密鍵を読むのですが、私はそれを使いたくありません:ファイル、3Pライブラリ、セキュアではありません。 誰かがそれを行う別の方法を知っていますか?秘密鍵をバイト配列としてエクスポートする最良の方法

ありがとうございます!

答えて

3

あなたが実際にあなたのX509Certificate2意志のPrivateKeyプロパティから取得AsymmetricAlgorithmオブジェクトが

あなたがする必要があります...、などRSACryptoServiceProviderDSACryptoServiceProviderなどAsymmetricAlgorithm由来の様々なタイプのいずれかのインスタンスでありますあなたが扱っている秘密鍵のタイプを決定し、それを適切にキャストします。キャストしたら、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ファイルに元の秘密鍵を持っている、と私は2つのキーbeteen比較しようとすると、I、として素晴らしい解決策と思われるが、それらが異なっていることを参照してください...私はどのように.NETのフレームワークがBLOBをエクスポートするか分からない、あなたはsomtimesこのメソッドを使用しますか?どのように動作するか私に説明できますか? – RRR

+0

CSPブロブは、暗号化オブジェクトを初期化するためにImportCspBlob関数で使用できるキーセットのWindows固有のバイナリ表現です。鍵のPEM表現ではありません。あなたの質問には、役に立つ答えを得ようとしている場合に達成しようとしていることを正確にするための詳細が必要なようです。 – Iridium

関連する問題