Ryan Brown

Ryan Brown

  • NA
  • 9
  • 0

Error deserializing object

Dec 22 2008 1:36 PM

Hello all and Happy Holidays!

 

I am working on a purely academic project trying to get ready for taking my 70-536 MS cert test. The subject if security and encryption. As a way of reinforcing the encryption concept in my mind I have set out creating a library project for encrypting objects. I was hoping to create one static encrypt method that takes a System.Object, string key and string Vector Initialization and returns that object encrypted. I can do this easily just using strings but, when I make the method accept a Object I have problems.

 

This is the main 'Encrypt' method:

 

public static object Encrypt(Object itemToEncrypt, string key, string vi)

        {

            if (itemToEncrypt == null)

            {

                throw new ArgumentNullException

                       ("The item which needs to be encrypted can not be null.");

            }

            byte[] keyBytes = ASCIIEncoding.ASCII.GetBytes(key);

            byte[] viBytes = ASCIIEncoding.ASCII.GetBytes(vi);

            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();

            MemoryStream memoryStream = new MemoryStream();

            CryptoStream cryptoStream = new CryptoStream(memoryStream,

                cryptoProvider.CreateEncryptor(keyBytes, viBytes), CryptoStreamMode.Write);

            StreamWriter writer = new StreamWriter(cryptoStream);

            writer.Write(itemToEncrypt);

            cryptoStream.FlushFinalBlock();

            writer.Flush();

            return HelperMethods.ByteArrayToObject(memoryStream.GetBuffer());

        }

 

The problem happens when I call the Helper Method ByteArrayToObject:

 

       public static Object ByteArrayToObject(byte[] arrBytes)

        {

            MemoryStream memStream = new MemoryStream();

            BinaryFormatter binForm = new BinaryFormatter();

            memStream.Write(arrBytes, 0, arrBytes.Length);

            memStream.Seek(0, SeekOrigin.Begin);

            memStream.Flush();

            memStream.Position = 0;

            Object obj = binForm.Deserialize(memStream); <===

            return obj;

        }

 

Where the binForm.Deserialize method is called (Arrow to right) I get the following error:

 

{"Binary stream '0' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization."}

 

While I see explanations of this error all over, none of the suggestions have helped solve this problem.

 

Please forgive me in advance if I am missing something obvious. However, any and all suggestions would be greatly appreciated.

 

Best regards,

 

rbr


Answers (4)