3

作業中のプロジェクトの1つで暗号化メカニズムを使用する必要があります。私はRSA暗号化を調査していて、学ぶためにいくつかのサンプルプログラムを作成しました。

RSA暗号化のブロックサイズは16バイトであることを理解しています。そこで、以下の関数への入力として文字列「12345678」を指定しました。

public static string Encrypt(文字列入力){
    var byteConverter = new UnicodeEncoding();

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider();
    byte [] output = cruptoEngine.Encrypt(byteConverter.GetBytes(input)、false);
    BytesToString(出力);を返します。// BytesToString()はバイトを16進文字列に変換します
}

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

4

1 に答える 1

13

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

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

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

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

于 2009-03-27T07:17:42.693 に答える