【问题标题】:RSA encryption large data by blocksRSA按块加密大数据
【发布时间】:2018-10-24 11:46:06
【问题描述】:

对于加密、解密、签名和验证签名,我使用来自这里的代码 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));
}

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

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

【问题讨论】:

  • 虽然可以分割成多个块并分别进行 RSA 加密 - 这通常不是可行的方法,主要是因为 RSA 非常慢(比对称加密慢数千倍)。可行的方法是生成对称密钥(例如对于 AES 算法),使用对称算法 (AES) 加密文本,然后 encypt 仅使用 RSA 生成 AES 密钥并添加到加密文本中。在接收端 - 您首先提取加密的 AES 密钥(附加到文本),用 RSA 解密,然后用它解密文本。
  • @Evk 谢谢!非常好的技术:)

标签: c# encryption .net-core rsa


【解决方案1】:

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

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

这种方法背后的原因是

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多