2016-05-17 3 views
0

Я пытаюсь использовать метод шифрования AES в C# с помощью этого кода:Пустой или пустой массив, используя System.Security.Cryptography

public static byte[] encryptData(string plaintext) 
    { 
     Aes myAes = Aes.Create(); 
     byte[] encrypted = EncryptStringToBytes_Aes(plaintext,myAes.Key, myAes.IV); 
     return encrypted; 
    } 

static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV) 
    { 
     if (plainText == null || plainText.Length <= 0) 
      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; 
     Aes aesAlg = Aes.Create(); 
     aesAlg.Key = Key; 
     aesAlg.Key = IV; 
     ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); 
     MemoryStream msEncrypt = new MemoryStream(); 
     CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write); 
     StreamWriter swEncrypt = new StreamWriter(csEncrypt); 
     swEncrypt.Write(plainText); 
     encrypted = msEncrypt.ToArray(); 
     return encrypted; 
    } 

и вызова функции, как это:

byte[] encrypt = Security.encryptData("Hi, how are you?"); 

Но возвращаемый массив байтов всегда пуст.

Я пытаюсь использовать это для шифрования таких значений, как пароли в моем файле app.config.

ответ

0

Поместите ваши потоки в using или используйте метод Close, чтобы избавиться от них.

static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV) 
{ 
    // your code 
    byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); 
    byte[] encrypted; 
    Aes aesAlg = Aes.Create(); 
    aesAlg.Key = Key; 
    aesAlg.Key = IV; 
    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); 
    using(MemoryStream ms = new MemoryStream()) 
    { 
     using(CryptoStream csEncrypt = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) 
     { 
      csEncrypt.Write(plainBytes,0, plainBytes.Length); 
      csEncrypt.FlushFinalBlock(); 
      return msEncrypt.ToArray(); 
     } 
    } 
} 
+0

Благодарим вас, добавьте «использование» в потоки, решите свои проблемы –

Смежные вопросы