在我的研究中,我发现了关于这个主题的混合信息,因此我正在寻找专业知识来解释加密可变数量数据的最佳方法。
要求:
[编辑:添加附加要求 #3 以回应评论]
我想使用 RSA 进行公钥/私钥加密方案 这样我就可以将公钥分发给应该 加密数据但不应该知道如何解密
我需要支持 16 个字符以上的数据长度(信用卡 数)到千字节(序列化对象)甚至更多。大部分的 我加密的数据很小(信用卡、地址等)。
这用于加密静态数据。
我知道的选项:
仅 RSA: 使用
RSACryptoServiceProvider
使用公钥加密所有数据。 迭代小于键大小的 block 中的数据 减去填充。混合:使用
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/