C# RSA按块加密大数据

C# RSA按块加密大数据,c#,encryption,.net-core,rsa,C#,Encryption,.net Core,Rsa,对于加密、解密、签名和验证签名,我使用这里的代码 在我开始处理大文本之前,它一直运行良好 通过RSA加密不适用于大文本。大数据超过245字节,使用2048 RSA密钥 尝试加密大文本时出现异常: 异常消息:Interop.Crypto.opensslcryptographicsexception:“错误:0406D06E:rsa例程:rsa\u padding\u add\u PKCS1\u type\u 2:数据对于密钥大小来说太大” 加密功能: public string Encrypt(s

对于加密、解密、签名和验证签名,我使用这里的代码

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

通过RSA加密不适用于大文本。大数据超过245字节,使用2048 RSA密钥

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

异常消息:
Interop.Crypto.opensslcryptographicsexception:“错误:0406D06E:rsa例程:rsa\u padding\u add\u PKCS1\u type\u 2:数据对于密钥大小来说太大”

加密功能:

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的开发人员建议将一个长文本分解为多个小文本,分别加密并连接它们

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

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

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

这种方法背后的原因是

  • RSA加密速度很慢。和对称的相比非常慢
  • 即使对于较小的输出,RSA加密输出也要长得多
  • RSA在某些情况下(消息空间小)可能有一些弱点
基本上,您可以创建一个随机加密密钥,使用任何安全对称密码(例如AES、3DES、Salsa等)加密任意长度的数据,然后使用RSA加密对称加密密钥

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

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

这种方法背后的原因是

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

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

同时可以将数据分成多个数据块,并对每个数据块进行RSA加密-通常不需要这样做,主要是因为RSA非常慢(比对称加密慢数千倍)。方法是生成对称密钥(例如,对于AES算法),使用对称算法(AES)加密文本,然后使用RSA仅加密生成的AES密钥并将其前置到加密文本。在接收端,您首先提取加密的AES密钥(前置到文本),用RSA解密它,然后用它解密文本。@Evk谢谢!非常好的技术:)而将其拆分成多个块并用RSA对每个块进行加密是可能的-这通常不是一种方法,主要是因为RSA非常慢(比对称加密慢数千倍)。方法是生成对称密钥(例如AES算法),使用对称算法(AES)加密文本,然后使用RSA仅加密生成的AES密钥,并在加密文本前添加前缀。在接收端-您首先提取加密的AES密钥(在文本前面),用RSA解密,然后用它解密文本。@Evk谢谢!技术很好:)