RijndaelManaged实例的目的?

时间:2012-05-23 16:55:19

标签: c# cryptography

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

  1. 什么是模数和指数?

  2. 什么是IV?

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

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

    代码示例:

    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);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

RSA非常慢,并且有填充的开销。因此,生成随机对称密钥,使用RSA加密它,并使用对称密钥加密消息是很常见的。这种方法称为hybrid cryptosystem

如果使用单个密钥加密多个消息,则IV很重要,但由于此代码为每个消息创建了一个新密钥,因此IV在此处并不重要。仍然使用IV可以防止多目标攻击,因此对于唯一密钥并不完全没用,特别是如果密钥只有128位。

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

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