RSA按块加密大数据

时间:2018-10-24 11:46:07

标签: c# encryption .net-core rsa

对于加密,解密,签名和验证符号,我使用此处DotnetCore.RSA

的代码

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

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

尝试加密大文本时出现异常:

异常消息: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));
}

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

任何建议,这正常吗?也许建议使用.net Core的一些用于RSA加密的库

1 个答案:

答案 0 :(得分:2)

  

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

这不是最好的方法(礼貌地说)。使用RSA的常用方法(即使是较短的输入)也使用hybrid encryption

这种方法背后的原因是

  • RSA加密很慢。与对称之一相比非常慢。
  • 即使对于小型输出,RSA加密输出也要长得多
  • 在某些情况下(消息空间较小),RSA可能会有一些缺点

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