【发布时间】: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