2

int や long などの単純なものを暗号化しようとしています。私が見つけた最も簡単な方法は次のようになります。

int num = 2;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] numBytes = BitConverter.GetBytes(num);
byte[] encryptedBytes = rsa.Encrypt(numBytes, true);

問題は、encryptedBytes の長さが 128 バイトであることです。暗号化された結果が入力と同じバイト長であるデータを暗号化するにはどうすればよいですか (後で復号化できます)。

RSACryptoServiceProvider(512) または RSACryptoServiceProvider(384) を定義すると、結果を短縮できることはわかっていますが、それは最低です。

入力する 4 または 8 バイトと出力する 4 または 8 バイトが必要です (それぞれ)。

ありがとう!

*** 明確化:

小さなもの (つまり 4 または 8 バイト) を暗号化し、同様のサイズの結果を取得したいと考えています。一部のmodおよびshift操作ではなく、いくつかのキー(組み込みライブラリを使用)を使用しながら、C#でそれを行う最も簡単な方法は何ですか?

4

2 に答える 2

1

Blowfish を使用できます。ブロック サイズは 64 ビット / 8 バイトです。 http://www.hotpixel.net/software.html#blowfishnet

于 2009-06-10T13:07:14.287 に答える
0

それは可能ではありません。RSA は、いわゆるブロック暗号(可変ブロック長) です。

最もよく知られているストリーム暗号はおそらく RC4 ですが、.NET には組み込みの実装はありません。jonelf が提案したように、ブロック サイズが小さいアルゴリズムがおそらく最も簡単です。バイト数が重要でない場合は、AES (ブロック サイズ 128 ビット) を使用します。

もともと非対称アルゴリズムを検討していた理由はありますか?

于 2009-06-10T12:47:49.850 に答える