title: Why RijndaelManaged returns junk data after encryption?
body: <p>I have taken the decrypt code from <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx</a> and modified it as follows below. I have an encrypted example, and it works just fine while decoding. But when using the encryption function, it returns junk string with strange symbols. below are the functions of encrypt/decrypt.</p>
  
  <p>An example of encrypted string "hey" : "???U?b???z?Y???"
  <br>
  When decoded again: "ûc{ÁpÅ`ñ""Â"</p>
  
  <p>I'm using this code to convert the byte array to string:</p>
  
  <pre><code>private string ByteArrayToString(byte[] input)
      {
          ASCIIEncoding dec = new ASCIIEncoding();
          return dec.GetString(input);
      }
  </code></pre>
  
  <p>here are the encrypt/decrypt functions. the decryption function is working fine.</p>
  
  <pre><code>private string DecryptStringFromBytesAes(byte[] cipherText, byte[] Key, byte[] IV)
      {
          // Check arguments. 
          if (cipherText == null || cipherText.Length &lt;= 0)
              throw new ArgumentNullException("cipherText");
          if (Key == null || Key.Length &lt;= 0)
              throw new ArgumentNullException("Key");
  
          // Declare the string used to hold 
          // the decrypted text.
          string plaintext = null;
  
          // Create an RijndaelManaged object 
          // with the specified key and IV. 
          using (RijndaelManaged aesAlg = new RijndaelManaged())
          {
              aesAlg.Key = Key;
              aesAlg.Padding = PaddingMode.Zeros;
              aesAlg.Mode = CipherMode.ECB;
  
              // Create a decrytor to perform the stream transform.
              ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
  
              // Create the streams used for decryption. 
              using (MemoryStream msDecrypt = new MemoryStream(cipherText))
              {
                  using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                  {
                      using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                      {
  
                          // Read the decrypted bytes from the decrypting stream 
                          // and place them in a string.
                          plaintext = srDecrypt.ReadToEnd();
                      }
                  }
              }
  
          }
  
          return plaintext;
  
      }
  
  
  
  
  private byte[] EncryptStringToBytesAes(string plainText, byte[] Key, byte[] IV)
      {
          // Check arguments. 
          if (plainText == null || plainText.Length &lt;= 0)
              throw new ArgumentNullException("plainText");
          if (Key == null || Key.Length &lt;= 0)
              throw new ArgumentNullException("Key");
          byte[] encrypted;
          // Create an RijndaelManaged object 
          // with the specified key and IV. 
          using (RijndaelManaged aesAlg = new RijndaelManaged())
          {
              aesAlg.Key = Key;
              aesAlg.Padding = PaddingMode.Zeros;
              aesAlg.Mode = CipherMode.ECB;
              // 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))
                      {
  
                          //Write all data to the stream.
                          swEncrypt.Write(plainText);
                      }
                      encrypted = msEncrypt.ToArray();
                  }
              }
          }
          return encrypted;
  
      }
  </code></pre>