.net 使用RSA加密的加密数据大小(RSACryptServiceProvider)

.net 使用RSA加密的加密数据大小(RSACryptServiceProvider),.net,encryption,cryptography,rsa,.net,Encryption,Cryptography,Rsa,我需要在我正在进行的一个项目中使用一些加密机制。我正在探索RSA加密,并编写了一些示例程序来学习 我知道RSA加密的块大小是16字节。因此,我将字符串“12345678”作为以下函数的输入: public static string Encrypt (string input) { var byteConverter = new UnicodeEncoding (); RSACryptoServiceProvider cruptoEngine = new RSACryptoSe

我需要在我正在进行的一个项目中使用一些加密机制。我正在探索RSA加密,并编写了一些示例程序来学习

我知道RSA加密的块大小是16字节。因此,我将字符串“12345678”作为以下函数的输入:

public static string Encrypt (string input) { var byteConverter = new UnicodeEncoding (); RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider(); byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false); return BytesToString (output); //BytesToString () converts the bytes to hex string } 公共静态字符串加密(字符串输入){ var字节转换器=新的Unicode编码(); RSACryptoServiceProvider cruptoEngine=新的RSACryptoServiceProvider(); byte[]输出=cruptoEngine.Encrypt(byteConverter.GetBytes(输入),false); 返回BytesToString(输出);//BytesToString()将字节转换为十六进制字符串 }
现在我得到的加密字符串是128字节(256个十六进制字符)。这根绳子对我来说太大了。我希望如果我给16字节的普通数据,我会得到16字节的加密数据。我做错什么了吗?这是应该发生的吗?我可以缩短加密数据吗?

你错了。RSA不是一种分组密码,因此您不能真正谈论它的块大小

RSA加密的输出将具有与RSA模相同的长度。您的代码中没有指定任何RSA密钥,因此运行时(据我所知)将使用默认密钥。该键显然具有1024位模,这解释了输出长度

您可能需要研究AES加密。出于许多原因,通常只应使用RSA加密密钥,然后使用AES或类似的对称密码算法加密实际文本

AES是一种块大小为16字节的分组密码,因此它将(根据您使用的填充和传输初始化向量的方式)将16字节的普通数据加密为16字节的加密数据