public static T SafeDeserialize <T>(byte[] key, Stream stream) { BinaryReader br = new BinaryReader(stream); AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); aes.KeySize = 256; aes.Key = Pad(key, aes.KeySize / 8); byte[] iv = new byte[aes.IV.Length]; stream.Read(iv, 0, iv.Length); aes.IV = iv; Utilities.LogMessage("Read IV as {0}, {1}", Utilities.GetString(iv), Utilities.GetString(aes.IV)); var transform = aes.CreateDecryptor(); IFormatter formatter = new BinaryFormatter(); CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Read); T ret = (T)formatter.Deserialize(cs); cs.Close(); return(ret); }
public static void SafeSerialize <T>(T obj, byte[] key, Stream stream) { IFormatter formatter = new BinaryFormatter(); AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); aes.KeySize = 256; aes.Key = Pad(key, aes.KeySize / 8); stream.Write(aes.IV, 0, aes.IV.Length); Utilities.LogMessage("Serializing, new IV is {0}", Utilities.GetString(aes.IV)); var transform = aes.CreateEncryptor(); CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Write); formatter.Serialize(cs, obj); cs.Close(); }