【发布时间】:2011-10-28 16:27:39
【问题描述】:
我使用 RSACryptoServiceProvider 来加密一些小数据块。对于我正在研究的解决方案,重要的是如果使用相同的公钥对同一段源数据进行两次加密,则结果(加密的数据块)是不一样的。
我已经通过一个示例对此进行了检查,它的工作方式与我希望的一样。我现在的问题是,如果这种行为是设计和保证的,或者我是否必须在源数据中添加一些随机部分以保证加密后无法再匹配具有相同数据的数据块。
示例如下:
byte[] data=new byte[]{1,7,8,3,4,5};
RSACryptoServiceProvider encrypter = cert.PublicKey.Key as RSACryptoServiceProvider;
byte[] encryptedData = encrypter.Encrypt(data,true);
// encryptedData has always other values in, although the source data is always
// 1,7,8,3,4,5 and the certificate is always the same (loaded from disk)
具体的问题是针对 .net 的,但如果是设计使然的话,也许可以为所有 RSA 实现给出一般的答案?
【问题讨论】:
-
切线,您不应该直接使用 RSA 加密您的数据 - 而是使用 RSA 加密对称密钥,并使用对称密钥加密您的数据。或者更好的是,使用为您执行此操作的现有库。
-
@Nick:感谢您的评论。我加密了一个 SHA1 哈希。我认为在这种情况下不需要使用混合加密。相反,我认为这只是无用的开销。我是对的还是我误解了什么?
-
不,这很公平 - 您实际上是在签名而不是加密。不过,我仍然建议使用现有的库而不是自己编写原语。
标签: cryptography rsa .net-security