i have the following utility functions to Serialize my objects to encrypted byte array and also to deserialize from decrypted byte array
//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<T>(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;
}
and here is a test using the above utility functions
//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<SomeObject>(memoryStream);
the problem comes when deserializing the object, see the commented last line, what am i doing wrong?