1

RSACryptoServiceProvider を使用して 256 バイトの配列を暗号化しようとしていますが、毎回「Bad Length」の例外が発生します。

byte[] seed = new byte[256];
byte[] cypherSeed = new byte[256];

RNGCryptoServiceProvider gen = new RNGCryptoServiceProvider();
gen.GetBytes(seed);

using (RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider(2560))
{
   RSAParameters param = new RSAParameters();
   param.Exponent = this.exponent;
   param.Modulus = this.modulus;

   // set public keys
   rsaCryptoServiceProvider.ImportParameters(param);
   cypherSeed = rsaCryptoServiceProvider.Encrypt(seed, false);
}

私は何を間違っていますか?? !!

4

1 に答える 1

2

パディングを考慮するのを忘れました。RSA はパディングのために残りのブロックを必要とするため、メッセージ サイズはキー サイズよりも小さくなります。

PKCS#1 v1.5 パディングを使用する場合は、11 バイトのパディングが必要です。より強力な OAEP パディングを使用する場合は、パディングとして 2*hashsize + 2 バイトが必要です。

RSACryptoServiceProvider.Encrypt メソッドを参照してください。

また、RSA でランダム キーを暗号化し、そのキーで実際のメッセージを暗号化するハイブリッド暗号化の使用も検討する必要があります。

于 2012-06-24T14:57:32.723 に答える