title: encrypting and decrypting a byte array
body: <p>i have the following utility functions to Serialize my objects to encrypted byte array and also to deserialize from decrypted byte array</p>
  
  <pre><code>//encryption key
  public static byte[] Key = new byte[]{0x43, 0x72, 0x6e, 0x6d, 0x54, 0x4d, 0x65,
                                        0x94, 0x16, 0x32, 0x44, 0x84, 0x7e, 0x18,
                                        0x64, 0x76, 0x6e, 0x63, 0x64, 0x7a, 0x5f,
                                        0x84, 0x7f, 0x9a};
  
  //Decrypt byte[]
  public static byte[] Decrypt(byte[] data)
  {
      MemoryStream ms = new MemoryStream();
      Rijndael alg = Rijndael.Create();
      alg.Key = Key;
      CryptoStream cs = new CryptoStream(ms,
      alg.CreateDecryptor(), CryptoStreamMode.Write);
      cs.Write(data, 0, data.Length);
      cs.Close();
      byte[] decryptedData = ms.ToArray();
      return decryptedData;
  }
  
  //Encrypt byte[]
  public static byte[] Encrypt(byte[] data)
  {
      MemoryStream ms = new MemoryStream();
      Rijndael alg = Rijndael.Create();
      alg.Key = Key;
      CryptoStream cs = new CryptoStream(ms,
      alg.CreateEncryptor(), CryptoStreamMode.Write);
      cs.Write(data, 0, data.Length);
      cs.Close();
      byte[] encryptedData = ms.ToArray();
      return encryptedData;
  }
  
  //serialize object to memory stream
  public static MemoryStream SerializeToStream(object o)
  {
      MemoryStream stream = new MemoryStream();
      IFormatter formatter = new BinaryFormatter();
      formatter.Serialize(stream, o);
      return stream;
  }
  
  //deserialize object from memory stream
  public static T DerializeFromStream&lt;T&gt;(MemoryStream memoryStream) where T : new()
  {
      if (memoryStream == null) { return new T(); }
      T o;
      BinaryFormatter binaryFormatter = new BinaryFormatter();
      using (memoryStream)
      {
          memoryStream.Seek(0, SeekOrigin.Begin);
          o = (T)binaryFormatter.Deserialize(memoryStream);
      }
      return o;
  }
  </code></pre>
  
  <p>and here is a test using the above utility functions</p>
  
  <pre><code>//serialize to stream then to byte array
  var obj = new SomeObject();
  var bytes = SerializeToStream(obj).ToArray();
  bytes = Encrypt(bytes);
  
  //deserialize to decrypted byte array then to stream then to object
  var memoryStream = new MemoryStream();
  var Decryptedbytearray = Decrypt(bytes);
  //fille the stream
  memoryStream.Write(Decryptedbytearray, 0, Decryptedbytearray.Length);
  //deserialize the object from the stream
  //it fails here giving an exception saying the binary data is not valid
  var obj2 = DerializeFromStream&lt;SomeObject&gt;(memoryStream);
  </code></pre>
  
  <p>the problem comes when deserializing the object, see the commented last line, what am i doing wrong?</p>