2

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

要求:

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

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

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

  3. 这是为了加密静态数据。

我知道的选项:

  1. RSA-ONLY:用于使用RSACryptoServiceProvider公钥加密所有数据。遍历小于键大小减去填充的块中的数据。

  2. HYBRID:用于AesCryptoServiceProvider加密数据、调用 .GenerateKey().GenerateIV()生成随机密钥和IV。然后使用 RSACryptoServiceProvider 加密上述密钥和 IV 并将其添加到数据中。

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

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

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

4

2 回答 2

2

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

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

我会选择混合方法,因为它适用于任意大小的数据,并且除非您选择 ECB 作为操作模式(CBC - Cypher Block Chaining mode - 应该这样做),否则不会容易出现这种信息泄漏

于 2012-11-07T16:36:42.707 回答
0

如果你只想使用 RSA 存储少量数据,小于密钥中的位数,你可以用随机数填充输入数据。https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Padding列出了几种填充方案

于 2015-09-01T03:26:19.363 回答