C#System.Security.Cryptography - 为什么要指定键和IV两次?

时间:2017-11-28 16:15:36

标签: c# encryption cryptography

显示如何使用System.Security.Cryptography中的AES代码进行加密的大多数示例如下所示:

using (Aes aes = Aes.Create())
{
   aes.Key = Key;
   aes.IV = IV;
   ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

是否需要指定键和IV两次 - 一次指向Aes对象,一次指定给CreateEncryptor()函数?或者在这种情况下,因为我已经指定了键和IV,我可以调用不带参数的CreateEncryptor()形式吗?

1 个答案:

答案 0 :(得分:6)

你不必。如果使用属性指定值,则可以使用the CreateEncryptor() overload(不带参数):

public virtual ICryptoTransform CreateEncryptor() {
    return CreateEncryptor(Key, IV);
}

这是the doc所说的:

  

使用当前Key属性和初始化向量(IV)创建对称加密器对象。

或者,如果您之后不使用aes对象来创建其他加密器/解密器,则可以省略设置属性并使用带参数的重载。