RSA分块加密大数据

Igo*_*ova 1 c# encryption rsa .net-core

对于加密、解密、签名和验证签名,我使用此处的代码DotnetCore.RSA

在我开始处理大文本之前,它一直运行良好。

通过 RSA 加密不适用于大文本。大,超过 245 个字节,具有 2048 个 RSA 密钥

我在尝试加密大文本时遇到异常:

异常消息:Interop.Crypto.OpenSslCryptographicException: 'error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size'

加密功能:

public string Encrypt(string text) {
  if (_publicKeyRsaProvider == null) {
    throw new Exception("_publicKeyRsaProvider is null");
  }
  return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.Pkcs1));
}
Run Code Online (Sandbox Code Playgroud)

编写 DotnetCore.RSA 的开发人员建议将长文本分成许多小文本,分别加密并连接它们

有什么建议吗,正常还是不正常?也许建议一些用于 .net Core 的 RSA 加密库

gus*_*to2 5

编写 DotnetCore.RSA 的开发人员建议将长文本分成许多小文本,分别加密并连接它们

这不是最好的方法(礼貌地说)。使用 RSA 的常见方法(即使对于较短的输入)是使用混合加密

这种方法背后的原因是

  • RSA 加密速度很慢。与对称的相比非常慢。
  • 即使对于小输出,RSA 加密输出也会更长
  • RSA在某些情况下(消息空间小)可能有一些弱点

基本上,您创建一个随机加密密钥,使用任何安全对称密码(例如 AES、3DES、Salsa 等)加密任何长度的数据,然后使用 RSA 加密对称加密密钥。