如何使用RSA生成随机数据?

时间:2010-06-14 08:02:03

标签: .net random rsa aes

加载我的RSACryptoServiceProvider rsa对象后,我想为我的AES对象创建一个密钥。因为我不需要存储AES密钥(我只需要它在我的prv端解密)我想我不需要存储它,我可以使用我的公钥生成它。

我以为做rsa.Encrypt(byte []有4个硬编码字节);会生成我需要的数据。事实证明,即使使用相同的数据,我每次调用此函数时都会得到不同的结果。因此,如果每次都有不同的话,我就无法重新创建AES密钥。

如何以可以随时重新创建的方式使用RSA生成数据?

1 个答案:

答案 0 :(得分:2)

您不使用公钥生成AES密钥。使用随机数生成器生成AES密钥,并使用收件人的公钥对其进行加密。在.NET中,您将拥有AES功能AesCryptoServiceProvider和密钥传输功能RSACryptoServiceProvider。加密要发送给Bob的数据的正常事件序列是:

  1. 使用。生成随机AES密钥 AesCryptoServiceProvider.GenerateKey 方法
  2. 使用AES加密数据。
  3. 从密钥中检索AES密钥 AES实例的属性。
  4. 使用Bob的RSA加密此AES密钥 关键使用 的RSACryptoServiceProvider。
  5. 将此信息与加密数据一起传输至 鲍勃。
  6. 当Bob收到此数据时,他使用RSA私钥撤消这些步骤。

    请注意,这是对CMS和PGP等邮件加密标准所做操作的简要说明。一般而言,您应该考虑使用其中之一的C#实现,而不是重新发明轮子。

    编辑

    System.Security.Cryptography.Pkcs Namespace中有几个.NET类似乎与CMS有关。我没有用过它们。