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);
            }
        }
    }

我是一名业余程序员,对序列化、流和加密知之甚少。我甚至感到惊讶的是,这项工作毫无问题。我的问题是:这段代码是否遵循了最佳编程实践,并在不浪费时间或资源的情况下充分实现了目标?

注意:这是一种通用方法,我将在程序中使用它来本地存储数据。

C#中的序列化、压缩和加密

看看https://github.com/HansHinnekint/EncryptionLib.的InfoBlockConverter代码https://github.com/HansHinnekint/EncryptionLib/blob/master/EncryptionLibrary/InfoBlockConvertor.cs可以用作样品。

以后只需要添加压缩。这应该没有那么难。