質問

次の関数を呼び出すとき:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

私は今、エラーを取得しています:悪い長さ。

小さな文字列が動作すると、問題が何であるかが私が渡している文字列が渡される可能性のあるアイデアは200文字未満です。

役に立ちましたか?

解決

RSA暗号化は、少量のデータのみを意味し、暗号化できるデータの量は、使用しているキーのサイズに依存します。たとえば、1024ビットRSAキーやPKCS#1 v1.5パディングなど、暗号化できますせいぜい117バイトで、2048 RSAキーを使用すると、245バイトを暗号化できます。

これには十分な理由がありますが、非対称暗号化は計算上高価です。大量のデータを暗号化する場合は、対称暗号化を使用する必要があります。しかし、あなたが非和解が必要な場合はどうなりますか?さて、あなたがしていることは両方を使用することです。対称キーを作成し、非対称暗号化を使用して交換し、それを安全に交換して対称キーを交換して大量のデータを暗号化します。これは、カバーの下でSSLとWSセキュアが使用するものです。

他のヒント

RSAの悪い長さの例外に関する将来の検索のために...

次の場合、特定のキーサイズで暗号化できる最大バイト数を計算できます。

((KeySize - 384) / 8) + 37

ただし、元の投稿にあるため、最適な非対称暗号化パッド(OAEP)パラメーターが当てはまる場合、次のことを使用して最大バイトを計算できます。

((KeySize - 384) / 8) + 7

法的キーサイズは16384から384で、スキップサイズは8です。

上で説明したように、「悪い長さ」タイプの例外の解決策は、対称的および非対称暗号化の使用をハイブリダイズすることで、暗号化しているテキストのサイズがキーサイズによって制約されません。基本的にRSA暗号化を使用して、非対称的にランダムを暗号化します .

暗号化用:

  1. AESやRijndaelなどの対称暗号化手法に必要な長さのランダムキーを生成します。

  2. ステップ1で生成されたランダムキーを使用して、AES/rijndaelを使用してテキスト/データを対称的に暗号化します。

  3. RSAを使用して、ステップ1で生成されたランダムキーを非対称的に暗号化します。

復号化のため:

  1. 最初に、プライベートRSAキーを使用してAES/Rijndaelが生成したランダムキーを復号化します。

  2. 次に、RSAが消すランダムキーを使用して元のテキスト/データを復号化します

デモンストレーションについては、C#で次の例を見てみたいと思うかもしれません。

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-ch/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top