0

可能重复:
RSA 加密,长度变差

我正在尝试使用 RSA 加密一个大字符串。.NET 的默认实现让我可以轻松加密小字符串,但是当我传递大字符串时,它会抛出 CryptographyException: Bad length。

我想克服这个问题,但问题是我需要将加密字符串传递给另一个我无法修改的应用程序(因为它不是我的 ;-)

那么是否有一个 RSA 实现可以用来加载 X509 公钥然后加密大字符串?

谢谢

4

2 回答 2

3

您将需要设计一些东西来完成此操作,可能通过将其拆分为块并加密每个块。

它不起作用,因为 RSA 加密中的明文长度受密钥长度的限制,即不可能加密大于用于加密它的密钥的数据。通常,使用 RSA 执行一次性的对称密钥交换,并从那里使用商定的对称算法。

此外,RSA(与对称算法相比)在计算上非常昂贵,并且将大数据分解为数十个(可能数百个?)小块会遇到可怕的性能问题,您可能只能每秒加密几兆字节。

强烈考虑另一种方法。

编辑:另外,请查阅必须接受这些加密字符串的程序的文档,因为如果程序无法解密它们,它不会帮助您使用一些非标准的加密方式。

于 2012-07-19T13:44:13.230 回答
1

查看 Bouncy Castle 密码库: http: //www.bouncycastle.org/csharp/index.html

我认为这个库比.Net 的标准库更灵活。我用在它可以做标准不能做的事情的场景中。

此外,作为一种解决方法,您可以将大字符串拆分为长度与加密密钥相对应的较小字符串,然后使用标准的 .Net 类。

最后。你确定这不是填充的问题吗?填充时,您应该填充字符串的某些部分以获得正确的长度。

于 2012-07-19T13:47:18.100 回答