在python中以安全,节省空间的方式存储高分

时间:2015-08-12 23:15:14

标签: python python-2.7 encryption serialization pickle

我在python中制作了一个游戏,它产生了大量我想要存储的高分,其中包括安全性,存储效率和易用性。目前我将它们存储在字典中,其中的键引用了不同的级别类型,然后将其写入config/blueprints文件并使用/1.0进行检索。
编辑:我现在知道这是一个坏主意,而是使用json。但是,该文件仍然清晰可辨,任何可以添加的加密都是有益的。

.txt

但是,我对这个方法有一些问题,我希望得到一些建议。

  • 我想缩小文件大小。压缩文件确实有很大的不同,但更有效的格式会更好。
  • 我想让它有点更安全。理想情况下,我希望熟悉python的玩家能够解决如何编辑高分的问题。
  • 我想通过添加新的分布式副本,使更容易更新高分的主副本,特别是在字典中使用元组键是相当笨拙的。

使用evalimport os #Reading from file try: with open(os.path.join(root_directory, 'highscores.txt'), 'r') as f: highscores = eval(f.read()) except IOError: highscores = dict() #Writing to file with open(os.path.join(root_directory, 'highscores.txt'), 'w') as f: f.write(highscores) 方法制作Highscore课程是否值得,是否可以/应该添加其他安全性?

2 个答案:

答案 0 :(得分:1)

JSON将是一种很好的格式来存储你的分数。如果你担心文件大小,你可以gzip JSON文件,虽然这可能会对性能产生影响。

如果您的用户有权访问源代码,我怀疑是否有一种很好的方法来加密文件,仔细检查代码就无法撤消。如果它被“编译”成一种不太友好的格式,那么你可以做一些加密,虽然密钥会在某处。

JSON和gzip似乎是标准python安装的一部分,而有一些看似很受欢迎的加密库,如Simple-CryptCrypto,需要安装。

但是,如果您可能有多个进程可能更新此文件(例如同时播放多个播放器),则可能会遇到冲突,从而导致文件损坏。正如其他人在此提出的那样,某种数据库将是更好的解决方案。

答案 1 :(得分:1)

正如评论中所建议的那样,JSON似乎是您项目的理想存储方法。以下是您的代码的修改版本,已修改为读取和读取将JSON写入highscores.txt文件。

import os
import json

#Reading from file
try:
    with open(os.path.join(root_directory, 'highscores.txt'), 'r') as f:
        highscores = json.load(f)
except IOError:
    highscores = dict()

#Writing to file
with open(os.path.join(root_directory, 'highscores.txt'), 'w') as f:
    json.dump(highscores, f)

关于安全性,要写入文本文件,您可能希望将高分数编码为JSON;加密JSON的数据;将加密的JSON数据写入文本文件。然后阅读这些数据,简单地按照我们的顺序颠倒我们刚才所做的事情。如果你四处搜索,你会遇到Python提供的多个有用的加密库。祝你好运!