2009-06-10 24 views
2

私はintやlongのような単純なものを暗号化しようとしています。私が見つけた最も簡単な方法は、次のようになります。.NetシンプルなRSA暗号化

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バイト)を暗号化し、同様のサイズの結果を取得したいです。いくつかのモジュレーションやシフト操作ではなく、いくつかのキー(ライブラリが組み込まれています)を使用しながら、C#でそれを行う最も簡単な方法は何ですか?

+0

なぜ小さなオブジェクトを暗号化しますか?全体的な成果を上げたいと思っている方は、より良い回答を得るために役立つかもしれません –

答えて

0

これは不可能です。 RSAは、いわゆるblock cipher(可変長ブロック)です。

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

最初に非対称アルゴリズムを調べていた理由はありますか?

+0

私の質問を明確にしておくべきです。私は何か小さい(つまり4または8バイト)暗号化して、同様のサイズの結果を得たいと思っています。いくつかのmodとシフト操作ではなく、いくつかのキー(ライブラリが組み込まれています)を使用しながら、C#でそれを行う最も簡単な方法は何ですか? – user97889

+0

数字の暗号化を検討していて、 RSAを使用してください(ちょっと、それは暗号化しています:) 私はフクロウの例を見ていきます... – user97889