我正在开发一个数独游戏,我有一个可以保存的数独游戏列表。我目前有以下序列化程序类来保存游戏:
/// <summary>
/// A method to serialize the game repository
/// </summary>
/// <param name="filename">A string representation of the output file name</param>
/// <param name="savedGameRepository">The saved game repository</param>
public void SerializeRepository(string filename, SavedGameRepository savedGameRepository)
{
using (Stream stream = File.Open(filename, FileMode.OpenOrCreate))
{
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, savedGameRepository);
}
}
/// <summary>
/// A method to deserialize the game repository
/// </summary>
/// <param name="filename">A string representation of the input file name</param>
/// <returns>A SavedGameRepository object</returns>
public SavedGameRepository DeserializeRepository(string filename)
{
SavedGameRepository savedGameRepository = new SavedGameRepository();
using (Stream stream = File.Open(filename, FileMode.OpenOrCreate))
{
BinaryFormatter bFormatter = new BinaryFormatter();
if (stream.Length > 0)
{
savedGameRepository = (SavedGameRepository)bFormatter.Deserialize(stream);
}
}
return savedGameRepository;
}
当然,这样做的问题是数据文件仍然显示与数独解决方案相关的文本,因此用户可以阅读和作弊。我尝试使用非对称加密,但游戏对象列表当然太长了。我使用了对称加密,只要游戏没有关闭它就可以工作。一旦关闭并重新打开,密钥就会消失,并且无法重新打开加密的数据文件。是否可以保留对称加密密钥?