2009-06-10 104 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個字節),並獲得類似的尺寸的結果。什麼是同時仍然使用一些鍵(與在建庫),而不是一些MOD和移位操作

+0

你爲什麼要加密的小物件?如果我們有一個更好的想法想要完成整體 – 2009-06-10 13:40:56

回答

0

這是不可能做到這一點在C#中最簡單的方法。 RSA是所謂的block cipher(具有可變塊長度)。

最知名的流密碼可能是RC4,但.NET沒有附帶內置的實現。一個小塊大小的算法,像jonelf所建議的那樣,可能是最簡單的。如果字節數不重要,我會使用AES(塊大小爲128位)。

是否有一個理由,爲什麼你最初看到的是一個非對稱算法?

+0

那麼我應該澄清我的問題。我想加密一些小的(即4或8字節)並獲得相似大小的結果。在C#中完成它的最簡單方法是使用某些鍵(使用內置庫),而不是使用某些模式和移位操作 – user97889 2009-06-10 13:01:21

+0

我必須承認,我正在考慮對數字進行加密,而不是記住它的含義,只是使用RSA(赫克,它​​加密:) 我會看看河豚的例子... – user97889 2009-06-10 13:44:14