【问题标题】:Encrypted data size using RSA encryption (RSACryptoServiceProvider)使用 RSA 加密的加密数据大小 (RSACryptoServiceProvider)
【发布时间】:2009-03-26 12:03:42
【问题描述】:

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

我了解 RSA 加密的块大小为 16 字节。所以我给了字符串“12345678”作为下面函数的输入:

公共静态字符串加密(字符串输入){ var byteConverter = new UnicodeEncoding (); RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider(); byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false); 返回 BytesToString(输出); //BytesToString() 将字节转换为十六进制字符串 }

现在我得到的加密字符串是 128 个字节(256 个十六进制字符)。这个字符串对我来说太大了。我有点希望如果我提供 16 字节的纯数据,我会得到 16 字节的加密数据。难道我做错了什么?这是应该发生的事情吗?我能以某种方式缩短加密数据吗?

【问题讨论】:

    标签: .net encryption cryptography rsa


    【解决方案1】:

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

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

    您可能希望改为研究 AES 加密。由于许多原因,您通常应该只使用 RSA 来加密密钥,然后使用 AES 或类似的对称密码算法来加密您的实际文本。

    AES 是块大小为 16 字节的块密码,因此(取决于您使用的填充以及传输初始化向量的方式)将 16 字节的普通数据加密为 16 字节的加密数据。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多