从加密或不可读或二进制格式保存和加载字典?

时间:2010-12-26 20:47:55

标签: c# encryption dictionary binary save

我有一个字典如下:

public Dictionary<int, SpawnList> spawnEntities = new Dictionary<int, SpawnList>();

使用的课程如下:

    public class SpawnList
    {
        public int NpcID { get; set; }
        public string Name { get; set; }
        public int Level { get; set; }
        public int TitleID { get; set; }
        public int StaticID { get; set; }

        public entityType Status { get; set; }

        public int TypeA { get; set; }
        public int TypeB { get; set; }
        public int TypeC { get; set; }

        public int ZoneID { get; set; }
        public int Heading { get; set; }
        public float PosX { get; set; }
        public float PosY { get; set; }
        public float PosZ { get; set; }
    }

/// <summary>Entity type enum.</summary>
public enum entityType
{
    Ally,
    Enemy,
    SummonPet,
    NPC,
    Object,
    Monster,
    Gatherable,
    Unknown
}
  • 如何将此词典保存到 二进制或加密格式 所以我以后再装入它 我的申请?

    我在这里遇到的最大问题不在于如何自行保存文件或对文件进行加密,而主要是关于如何在有课程时如何进行加密,以及如何在以后对其进行反序列化。

我的限制是.Net 3.5不能使用更高的任何东西。

3 个答案:

答案 0 :(得分:3)

将序列化方面与加密方面分开。序列化数据的方法有多种:

  • 编写您自己的序列化代码
  • 使用内置二进制序列化程序
  • 使用内置的XML序列化程序
  • 使用第三方序列化框架,例如Thrift或Protocol Buffers

所有这些都可能允许您对流进行序列化和反序列化。然后你应该看一下使用CryptoStream来处理加密/解密 - 但要注意,如果你自己的代码需要能够在没有额外信息的情况下解密数据,那么它需要有密钥可用于它...这基本上意味着任何能够运行代码的人都可以使用它。

答案 1 :(得分:2)

将班级标记为

[Serializable]

并使用

将其序列化到任何Stream
FileStream stream = File.Create("binary.bin");
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, spawnEntities);
stream.Flush();
stream.Close();

使用

对其进行反序列化
stream = File.Open("binary.bin", FileMode.Open);
spawnEntities = formatter.Deserialize(stream) as Dictionary<int, SpawnList>;
stream.Close();

答案 2 :(得分:0)

让您入门的简单方法:

  1. 通过附加[Serializable]属性
  2. 使您的班级可序列化
  3. 使用CryptoStreamBinaryFormatter将其序列化为文件并加密数据。
  4. CryptoStream的引用提供了设置加密和执行相关文件处理的完整示例。