在我的研究中,我发现与此主题相关的消息不一,因此我正在寻找专业知识来解释加密可变数量数据的最佳方法。

要求:

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


我想将RSA用于公钥/私钥加密方案
所以我可以将公钥分发到应
加密数据,但不知道如何解密
我需要支持16个字符以上的数据长度(信用卡
数字)到千字节(序列化的对象)及更高。大部分的
    我加密的数据很小(信用卡,地址等)。
这是用于加密静态数据。


我知道的选项:


仅限RSA:使用RSACryptoServiceProvider使用公共密钥加密所有数据。
遍历小于键大小的块中的数据
减去填充。
混合:使用AesCryptoServiceProvider加密数据,调用
.GenerateKey().GenerateIV()生成随机密钥和IV。
然后使用RSACryptoServiceProvider加密上述密钥和IV
并将其添加到数据之前或之后。


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

这些方法的优缺点是什么?标准是什么?令人惊讶的是,我没有找到关于该主题的意见或信息,希望您能提供任何参考。

奖金:
我出于各种原因(包括公司许可限制)动用了自己的语言,但我很好奇C#是否有良好的标准开源方法。

最佳答案

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

如果使用RSA加密数据(而不是密钥),则可能会遇到在对称块密码上下文中已知的ECB(电子密码簿模式)问题:对于给定的密钥,始终会映射明文到相同的密文...单独使用它并不能帮助破坏加密,但是由于攻击者可以识别哪些数据包包含相同的明文,因此它可能泄漏信息

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

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

10-11 22:48
查看更多