我需要使用一些加密机制在我工作的项目之一。我正在探索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
}

现在加密的字符串,我得到的是128个字节(256个十六进制字符)。此字符串是对我来说太大。我是那种希望,我会得到16个字节的加密数据的,如果我给16个字节的明文数据的。难道我做错了什么?请问这是什么应该发生的?我能以某种方式缩短加密的数据?

有帮助吗?

解决方案

您是错误的。 RSA是不是块加密,所以你不能真正谈论它的块大小。

的RSA加密的输出将具有相同长度的RSA模数。您还没有显示在你的代码中的任何RSA密钥,因此运行时将(据我记得)使用默认密钥。该键显然具有1024位模数,这解释了输出长度。

您可能想看看AES加密来代替。由于多种原因,你应该通常只使用RSA加密一个键,然后使用AES或类似的对称加密算法来加密你的实际文本。

AES是块密码与块大小为16字节,使得将(取决于使用哪填充以及如何运输您初始化向量)加密16个字节明文数据的16个字节的加密的数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top