C#中的序列化、压缩和加密
本文关键字:压缩 加密 序列化 | 更新日期: 2023-09-27 18:28:55
我想写一个C#类,它可以按顺序序列化、压缩和加密对象。我需要生成的文件到
- 尽快创建
- 占用尽可能少的空间
- 尽可能不可读
我已经研究和编码了一段时间,这就是我所拥有的。
private void SaveObject(string path, object obj)
{
using (FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
string password = "123";
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
RijndaelManaged RMCrypto = new RijndaelManaged();
using (CryptoStream cryptoStream = new CryptoStream(fileStream, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write))
using (var gZipStream = new GZipStream(cryptoStream, CompressionMode.Compress))
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(gZipStream, obj);
}
}
}
private void LoadObject(string path, out object obj)
{
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
string password = "123";
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
RijndaelManaged RMCrypto = new RijndaelManaged();
using (CryptoStream cryptoStream = new CryptoStream(fileStream, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Read))
using (var gZipStream = new GZipStream(cryptoStream, CompressionMode.Decompress))
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
obj = binaryFormatter.Deserialize(gZipStream);
}
}
}
我是一名业余程序员,对序列化、流和加密知之甚少。我甚至感到惊讶的是,这项工作毫无问题。我的问题是:这段代码是否遵循了最佳编程实践,并在不浪费时间或资源的情况下充分实现了目标?
注意:这是一种通用方法,我将在程序中使用它来本地存储数据。
看看https://github.com/HansHinnekint/EncryptionLib.的InfoBlockConverter代码https://github.com/HansHinnekint/EncryptionLib/blob/master/EncryptionLibrary/InfoBlockConvertor.cs可以用作样品。
以后只需要添加压缩。这应该没有那么难。