2009-06-10 80 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