Tôi vừa thêm hỗ trợ GZipStream cho ứng dụng của mình hôm nay, vì vậy tôi có thể chia sẻ một số mã tại đây;
serialization:
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);
}
}
}
Deserialization:
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);
}
}
}
Chú ý: nếu bạn sử dụng CryptoStream, nó là khá quan trọng mà bạn chuỗi (un) nén và (de) crypting đúng cách này, bởi vì bạn sẽ muốn mất mã hóa entropy TRƯỚC KHI tạo ra nhiễu từ dữ liệu của bạn.
Nguồn
2011-05-10 19:22:16
cảm ơn bạn điều này đã thực sự hữu ích, những gì sẽ giải nén trông giống như ... không bao giờ được sử dụng BinaryFormatter trước. –
Cảm ơn bạn đã thực hiện việc này dễ dàng sao chép + có thể dán vào mã của tôi. Tôi định dạng mọi thứ thường xuyên đủ để bây giờ chỉ là một đoạn trích mà tôi có thể dễ dàng tìm thấy trên Google. +1 –