title: Decryption Exception - length of the data to decrypt is invalid
body: <p>I am working in a C# application. We have common methods to store data on a file. These methods encrypt the data and store them on the file system. when we need the data, ReadData method decrypts the data and returns me plain text.</p>
  
  <p>This code works fine in normal cases if size of the text in small. but for a example text given below, the decryption code is throwing exception - length of the data to decrypt is invalid.</p>
  
  <p>The exception occurs at line  </p>
  
  <pre><code>        // close the CryptoStream
          x_cryptostream.Close();
  </code></pre>
  
  <p>I tried different ways but no luck. Can some pls help.</p>
  
  <p>Why am I encrypting already encrypted data - I am just trying to store in a file using common method of the huge application. The common methods <code>storedata(key,data)</code> nad <code>readdata(key)</code> do the encryption/decryption I can't avoid.</p>
  
  <pre><code>   public static byte[] Decrypt(byte[] ciphertext, string Key, string IV)
      {
          byte[] k = Encoding.Default.GetBytes(Key);
          byte[] iv = Encoding.Default.GetBytes(IV);
  
          // create the encryption algorithm
          SymmetricAlgorithm x_alg = SymmetricAlgorithm.Create("Rijndael");
          x_alg.Padding = PaddingMode.PKCS7;
  
          // create an ICryptoTransform that can be used to decrypt data
          ICryptoTransform x_decryptor = x_alg.CreateDecryptor(k, iv);
  
          // create the memory stream
          MemoryStream x_memory_stream = new MemoryStream();
  
          // create the CryptoStream that ties together the MemoryStream and the 
          // ICryptostream
          CryptoStream x_cryptostream = new CryptoStream(x_memory_stream,
          x_decryptor, CryptoStreamMode.Write);
  
          // write the ciphertext out to the cryptostream
          x_cryptostream.Write(ciphertext, 0, ciphertext.Length);
  
          // close the CryptoStream
          x_cryptostream.Close();
  
          // get the plaintext from the MemoryStream
          byte[] x_plaintext = x_memory_stream.ToArray();
  </code></pre>
  
  <p>Below is the code of encrypt method.</p>
  
  <pre><code>        public static byte[] Encrypt(string strplain, string Key, string IV)
          {
          byte[] k = Encoding.Default.GetBytes(Key);
          byte[] iv = Encoding.Default.GetBytes(IV);
  
          byte[] plaintext = Encoding.Default.GetBytes(strplain);
  
          // create the encryption algorithm
          SymmetricAlgorithm x_alg = SymmetricAlgorithm.Create("Rijndael");
          x_alg.Padding = PaddingMode.PKCS7;
          // create an ICryptoTransform that can be used to encrypt data
          ICryptoTransform x_encryptor = x_alg.CreateEncryptor(k, iv);
  
          // create the memory stream
          MemoryStream x_memory_stream = new MemoryStream();
  
          // create the CryptoStream that ties together the MemoryStream and
          // the ICryptostream
          CryptoStream x_cryptostream = new CryptoStream(x_memory_stream,
          x_encryptor, CryptoStreamMode.Write);
  
          // write the plaintext out to the cryptostream
          x_cryptostream.Write(plaintext, 0, plaintext.Length);
  
          // close the CryptoStream
          x_cryptostream.Close();
  
          // get the ciphertext from the MemoryStream
          byte[] x_ciphertext = x_memory_stream.ToArray();
  
          // close memory stream
          x_memory_stream.Close();
  
          // convert from array to string
          string cipher_Tx = Encoding.Default.GetString(x_ciphertext, 
              0, x_ciphertext.Length);
  
          x_encryptor.Dispose();
  
          x_alg.Clear();
          byte[] cipher = Encoding.Default.GetBytes(cipher_Tx);
  
          return cipher;
      }  
  </code></pre>