目前正在开发RPG,我问我如何保护已保存的数据,以便播放器/用户无法轻松阅读或修改它。我的意思是,一个有计算机和编程经验的人可以修改它,但我不希望lambda用户能够修改它,就像修改明文xml文件一样容易。
有没有办法用python做到这一点?
答案 0 :(得分:2)
仅pickle
或cpickle
压缩设置为max的配置对象是一种快速简便的选择。
答案 1 :(得分:1)
您可以使用zlib压缩数据。
savedata="level=3"
import zlib
#when saving
compressedString = zlib.compress(savedata)
#when loading
loaddata = zlib.decompress(compressedString)
答案 2 :(得分:1)
听起来你需要一个加密库。这将帮助您使用密钥加密或解密文件。好东西已经有一个叫做PyCrypto。您可以下载here。
要使用它,请在下载后It is documented here:
import string
from Crypto.Cipher import AES
from Crypto import Random
from Crypto.Random import random
def gen_cipher():
# generates 32 letter long key
key = ''.join(random.sample(string.ascii_letters, 32))
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
return cipher, iv
def write_data(data, rfile, cipher, iv):
with open(rfile, 'w') as f:
msg = iv + cipher.encrypt(b'Users cant edit this')
f.write(msg)
def read_data(rfile, cipher):
with open(rfile, 'r') as f:
data = f.read()
# first 16 bytes are IV
return cipher.decrypt(data)[16:]
def encrypt_existing_file(infile, outfile, cipher, iv):
with open(infile, 'r') as if:
data = if.read()
write_data(data, outfile, cipher, iv)
def decrypt_existing_file(infile, outfile, cipher, iv):
with open(outfile, 'r') as of:
data = read_data(infile)
of.write(data)
if __name__ == '__main__':
cipher, iv = gen_cipher()
write_data(b"You didn't see anything...", 'file.txt', cipher, iv)
# ...
# outputs: You didn't see anything...
print (read_data('file.txt', cipher))
它使用AES作为对称密钥密码。首先,我从32个随机选择的ascii字母中生成一个随机密钥。然后我创建一个初始化向量(iv)。这在加密文件的 start 中是必需的,以便正确初始化。然后是密码本身,它接受密钥,操作模式和初始化向量。 CFB模式(密码反馈模式)仅意味着AES将以下一个块在某种程度上取决于前一个块的方式使用。 Udacity在Symmetric ciphers,AES和CBC上有几个很棒的视频。
答案 3 :(得分:0)
尝试使用密码压缩或更改文件的第一个字节以防止正常解压缩
PS。制作一些不同的变体并检查尺寸/速度