c# - 我应该如何/应该使用 RSA 加密可变大小的数据 (RSACryptoServiceProvider)

标签 c# encryption rsa public-key-encryption

在我的研究中,我发现了关于这个主题的混合信息,因此我正在寻找专业知识来解释加密可变数量数据的最佳方法。

要求:

[编辑:添加附加要求 #3 以回应评论]

  1. 我想使用 RSA 进行公钥/私钥加密方案 这样我就可以将公钥分发给应该 加密数据但不应该知道如何解密

  2. 我需要支持 16 个字符以上的数据长度(信用卡 数)到千字节(序列化对象)甚至更多。大部分的 我加密的数据很小(信用卡、地址等)。

  3. 这用于加密静态数据。

我知道的选项:

  1. 仅 RSA: 使用 RSACryptoServiceProvider 使用公钥加密所有数据。 迭代小于键大小的 block 中的数据 减去填充。

  2. 混合:使用AesCryptoServiceProvider加密数据,调用 .GenerateKey().GenerateIV() 用于生成随 secret 钥和 IV。 然后使用RSACryptoServiceProvider对上面的key和IV进行加密 并将其添加到数据之前或附加到数据中。

在我看来,混合方法让我两全其美。强 block 密码 (AES) 和分布式公钥 (RSA)。

这些方法的优点和缺点是什么?标准是什么?令人惊讶的是,我没有找到关于该主题的太多意见或信息,并且希望您能提供任何引用资料。

奖金: 由于各种原因,包括公司许可限制,我正在推出自己的项目,但我很好奇 C# 是否有一个好的标准开源方法。

最佳答案

在大多数情况下,RSA 用于加密对称 key (您实际上不需要加密 IV,但是嘿...)

如果您使用 RSA 加密数据(而不是 key ),您可能会遇到对称 block 密码上下文中已知的 ECB(电子密码本模式)问题:对于给定 key ,明文总是映射到相同的密文……仅此一点并不能帮助破解加密,但它可能会泄漏信息,因为攻击者可以识别哪些数据包包含相同的明文

我会选择混合方法,因为它适合任意大小的数据,并且不会容易发生信息泄漏,除非您选择 ECB 作为操作模式(CBC - 密码 block 链接模式 - 应该这样做)

关于c# - 我应该如何/应该使用 RSA 加密可变大小的数据 (RSACryptoServiceProvider),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272063/

相关文章:

java - 加密后解密不返回原始字节数组?

c# - 当多个方法重载匹配时,优先级是什么?

c# - 如何从 .NET 类中以编程方式访问服务器级 IIS 连接设置?

c# - 使用 ServiceStack 解析 JSON

c - ARM 和 Intel 内部函数是否对 AES 使用相同的子 key 计划?

java - RSA数字签名失败

c# - 将 DataTable 转换为 XML 的防更改且最快的方法?

c# - 在asp.net mvc5登录中加密用户名

c++ - 使用来自 X509 证书 c++ 的公钥进行 RSA 公共(public)加密

.net - 在 .NET 核心中实现 RSA