2017-10-01 1 views
5

2048 RSA鍵ペアを生成する方法はありますか?RSACryptoServiceProviderにカスタム定義指数を使用しますか?例えばカスタム指数サイズの2048キーを生成しますか?

new RSACryptoServiceProvider(2048); // = 65537 always 

、私は65535に指数を設定したいのですが、ハードコードされた値は65537のようです。

私は見回しましたが、情報を見つけることができませんでした。

新しい鍵ペアを生成しようとしていますが、既存の鍵をインポートするのではなく、RSACryptoServiceProviderを使用しています。

すでに存在する鍵をインポートすると、モジュラス、指数などの要素を定義できます。

できない場合は、どのような選択肢がありますか?

+1

NISTには65537が必要です:http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-78-4.pdf優れたバックグラウンド[ここをクリック](https://crypto.stackexchange.com/a/3113) –

+0

@HansPassant私はクライアント/サーバーをC++からC#に移植しています。クライアントは現在、65535しか使用していません。 – Guapo

+0

まあ、ImportParameters()がキーです。答えのコードがReverse()であまりにも助けになるかもしれないことに注意してください。 –

答えて

0

わからないこれが役立つ場合は、

パラメータのエクスポート、変更、およびインポートを試行できます。 RSACryptoServiceProviderには、ExportParametersメソッドとImportParametersメソッドがあります。

public static class RsaCryptoServiceProviderExtension 
{ 
    public static void SetExponent(this RSACryptoServiceProvider provider, int exponent) 
    { 
     var rsaParams = provider.ExportParameters(true); 

     var expBytes = BitConverter.IsLittleEndian 
      ? BitConverter.GetBytes(exponent).Reverse() 
      : BitConverter.GetBytes(exponent); 

     rsaParams.Exponent = expBytes.Skip(1).ToArray(); 

     provider.ImportParameters(rsaParams); 
    } 
} 

、その後:

 var rsa = new RSACryptoServiceProvider(2048); 
     rsa.SetExponent(65535); 
     ... 
+0

「Bad Key」というメッセージがスローされる – Guapo

+0

@Guapo Imはトピックで経験していないので、これ以上アドバイスできません。ごめんなさい –

0

あなたはBouncy Castle暗号化ライブラリを使用することができますので、そのような拡張メソッドを記述することが可能です。あなたのパブリックRSA指数を設定するにはRsaKeyPairGeneratorクラスをRsaKeyGenerationParametersで生成するキーを使用してください。鍵ペアを生成する例は、hereを参照してください。しかし、指数の選択に注意を払う。公開RSA指数はFermat Numberである必要があります。指数の選択の詳細については、質問Impacts of not using RSA exponent of 65537を参照してください。

証明書の生成に関する有用な投稿も参照してください。Using Bouncy Castle from .NETあなたの便宜のためにBouncy Castle証明書を生成し、それを.NET X509Certificate2オブジェクトに変換することができます。

更新:

私はRSACryptoServiceProviderを使用してthis questionの例はあなたを助けるかもしれないと思います。

関連する問題