2009-03-26 29 views
3

私が取り組んでいるプロジェクトの1つでは、暗号化メカニズムを使用する必要があります。私はRSA暗号化を調べていて、学ぶためにいくつかのサンプルプログラムを書いていました。RSA暗号化(RSACryptoServiceProvider)を使用した暗号化されたデータサイズ

私は、RSA暗号化のブロックサイズが16バイトであることを理解しています。だから私は、関数以下の入力として文字列「12345678」を与えた:

 
public static string Encrypt (string input) { 
    var byteConverter = new UnicodeEncoding(); 

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider(); 
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false); 
    return BytesToString (output); //BytesToString() converts the bytes to hex string 
} 

今、私が手に暗号化された文字列は、128バイト(256進文字)です。この文字列は私にとっては大きすぎます。 16バイトのプレーン・データを与えると、16バイトの暗号化データが得られることを期待していました。私は何か間違っているのですか?これは何が起こるはずですか?暗号化されたデータをどうにか短縮できますか?

答えて

12

あなたは間違っています。 RSAはブロック暗号ではないため、実際にはブロックサイズについては言えません。

RSA暗号化の出力はRSA係数と同じ長さになります。あなたはコードにRSAキーを指定していないので、ランタイムは(私が思い出す限り)デフォルトのキーを使用します。その鍵には明らかに1024ビットのモジュラスがあり、出力の長さを説明しています。

代わりにAES暗号化を調べるとよいでしょう。多くの理由から、通常はRSAを使用してキーを暗号化し、次にAESまたは同様の対称暗号アルゴリズムを使用して実際のテキストを暗号化する必要があります。

AESはブロックサイズが16バイトのブロック暗号ですので、使用するパディングと初期化ベクトルの転送方法に応じて、16バイトのプレーンデータを16バイトの暗号化データに暗号化します。

関連する問題