Доброго дня.
Есть у меня такой вот код.
private static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
// Check arguments.
if (!String.IsNullOrEmpty(plainText))
throw new ArgumentNullException("plainText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
byte[] encrypted;
// Create an Aes object
// with the specified key and IV
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
//Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
encrypted = msEncrypt.ToArray();
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}
При анализе средствами VS2015 Community выдает следующие предупреждения:
Предупреждение CA2202 Объект "'msEncrypt'" можно удалять более одного раза в методе 'CriptToBase.EncryptStringToBytes_Aes(string, byte[], byte[])'. Чтобы избежать исключения System.ObjectDisposedException, следует вызывать метод "Dispose" для объекта только один раз.: Lines: 160, 162
и
Предупреждение CA2202 Объект "'csEncrypt'" можно удалять более одного раза в методе 'CriptToBase.EncryptStringToBytes_Aes(string, byte[], byte[])'. Чтобы избежать исключения System.ObjectDisposedException, следует вызывать метод "Dispose" для объекта только один раз.: Lines: 162
В соответствии с правилами предоставленными справочной системой VS2105 переделал метод как указанно ниже:
private static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
// Check arguments.
if (!String.IsNullOrEmpty(plainText))
throw new ArgumentNullException("plainText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
byte[] encrypted;
// Create an Aes object
// with the specified key and IV.
Aes aesAlg = null;
MemoryStream msEncrypt = null;
CryptoStream csEncrypt = null;
try
{
aesAlg = Aes.Create();
aesAlg.Key = Key;
aesAlg.IV = IV;
//Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
msEncrypt = new MemoryStream();
{
csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
encrypted = msEncrypt.ToArray();
}
}
finally
{
if (aesAlg != null)
aesAlg.Clear();
if (msEncrypt != null)
msEncrypt.Dispose();
if (csEncrypt != null)
csEncrypt.Dispose();
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}
и он все так же выдает те же самые предупреждения.
Я понимаю что это не страшно и не критично, но все же как правильно поправить код? Спасибо.