Acabo de agregar compatibilidad con GZipStream para mi aplicación hoy, así puedo compartir algunos códigos aquí;
serialización:
using (Stream s = File.Create(PathName))
{
RijndaelManaged rm = new RijndaelManaged();
rm.Key = CryptoKey;
rm.IV = CryptoIV;
using (CryptoStream cs = new CryptoStream(s, rm.CreateEncryptor(), CryptoStreamMode.Write))
{
using (GZipStream gs = new GZipStream(cs, CompressionMode.Compress))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(gs, _instance);
}
}
}
Deserialización:
using (Stream s = File.OpenRead(PathName))
{
RijndaelManaged rm = new RijndaelManaged();
rm.Key = CryptoKey;
rm.IV = CryptoIV;
using (CryptoStream cs = new CryptoStream(s, rm.CreateDecryptor(), CryptoStreamMode.Read))
{
using (GZipStream gs = new GZipStream(cs, CompressionMode.Decompress))
{
BinaryFormatter bf = new BinaryFormatter();
_instance = (Storage)bf.Deserialize(gs);
}
}
}
NOTA: si utiliza CryptoStream, es poco importante que la cadena de (des) compresión y (de) crypting derecha de esta manera, porque querrás perder tu entropía ANTES de que el cifrado genere ruido a partir de tus datos.
gracias esto ha sido muy útil, ¿cómo se vería la descompresión ... nunca antes se había usado BinaryFormatter? –
Gracias por hacer esto fácilmente copiar + pastable en mi código. Formateo las cosas con la suficiente frecuencia que esto es ahora solo un fragmento que puedo encontrar fácilmente en Google. +1 –