2

当我搜索 RSACypthyServiceProvider 时,我在 MSDN 上找到了以下代码示例。在评论的帮助下,我无法理解代码的某些部分。

  1. 什么是模数和指数?

  2. 什么是IV?

  3. 为什么他们使用 RijndaelManagedclass 进行非对称加密?根据我的搜索,RSACryptoServiceProvider 提供了非对称加密功能,它会在我们创建对象时自动创建私钥和公钥。那么 RijndaelManaged 实例的目的是什么?

任何人都可以解释一下吗?

代码示例:

class Class1
{

   static void Main()
   {

     //Initialize the byte arrays to the public key information.
      byte[] PublicKey = {Somethink in byte}

      byte[] Exponent = {1,0,1};

      //Create values to store encrypted symmetric keys.
      byte[] EncryptedSymmetricKey;
      byte[] EncryptedSymmetricIV;

      //Create a new instance of the RSACryptoServiceProvider class.
      RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

      //Create a new instance of the RSAParameters structure.
      RSAParameters RSAKeyInfo = new RSAParameters();

      //Set RSAKeyInfo to the public key values. 
      RSAKeyInfo.Modulus = PublicKey;
      RSAKeyInfo.Exponent = Exponent;

      //Import key parameters into RSA.
      RSA.ImportParameters(RSAKeyInfo);

      //Create a new instance of the RijndaelManaged class.
      RijndaelManaged RM = new RijndaelManaged();

      //Encrypt the symmetric key and IV.
      EncryptedSymmetricKey = RSA.Encrypt(RM.Key, false);
      EncryptedSymmetricIV = RSA.Encrypt(RM.IV, false);
    }
}
4

1 回答 1

1

RSA 非常慢,并且有填充开销。所以一般会生成一个随机对称密钥,用 RSA 加密,然后用对称密钥加密消息。这种方法被称为混合密码系统

如果使用单个密钥加密多条消息,IV 很重要,但由于此代码为每条消息创建一个新密钥,IV 在这里并不重要。仍然使用 IV 可以防止多目标攻击,因此使用唯一密钥并非完全无用,尤其是在密钥只有 128 位的情况下。

这段代码效率也很低:它分别加密 IV 和密钥,而不是连接它们。这使 RSA 开销加倍。

模数和指数是 RSA 公钥的两个部分。查阅维基百科了解详情。指数通常选择为2^16 + 1 = 65537,对应{1,0,1}于本代码中的 。

于 2012-05-23T17:00:49.803 回答