0

重複の可能性:
RSA 暗号化、長さが正しくありません

RSA を使用して大きな文字列を暗号化しようとしています。.NET の既定の実装では、小さな文字列を簡単に暗号化できますが、大きな文字列を渡すと、CryptographyException: Bad length がスローされます。

これを克服したいのですが、問題は、暗号化された文字列を変更できない別のアプリケーションに渡す必要があることです (それは私のものではないため ;-)

X509 公開鍵をロードして大きな文字列を暗号化するために使用できる RSA 実装はありますか?

ありがとうございました

4

2 に答える 2

3

これを達成するには、おそらくブロックに分割し、各ブロックを暗号化するなど、何かを工夫する必要があります。

RSA 暗号化の平文の長さはキーの長さによって制限されるため、機能しません。つまり、暗号化に使用されるキーよりも大きなデータを暗号化することは不可能です。一般に、対称鍵の 1 回限りの交換は RSA で実行され、そこから合意された対称アルゴリズムが使用されます。

また、RSA は (対称アルゴリズムと比較して) 非常に計算コストが高く、大きなデータを数十 (おそらく数百?) の小さなブロックに分割すると、ひどいパフォーマンスの問題が発生します。おそらく、1 秒あたり数メガバイトしか暗号化できません。

別のアプローチを強く検討してください。

編集: また、これらの暗号化された文字列を受け入れる必要があるプログラムのドキュメントを参照してください。プログラムが暗号化を解除できない場合、非標準の暗号化方法を使用しても役に立たないためです。

于 2012-07-19T13:44:13.230 に答える
1

Bouncy Castle暗号化ライブラリを見てください: http ://www.bouncycastle.org/csharp/index.html

このライブラリは、.Netの標準よりも柔軟性があると思います。標準ではできないことを実行できるシナリオで使用しました。

また、回避策として、大きな文字列を暗号化キーに対応する長さの小さな文字列に分割してから、標準の.Netクラスを使用することができます。

そして最後に。パディングの問題ではないことを確認しますか?パディングするときは、正しい長さになるように文字列の一部を埋める必要があります。

于 2012-07-19T13:47:18.100 に答える