我在游戏中使用Pygame
创建了一个高分系统,它在文本文件name.txt
和score.txt
中保存了名称和分数,但问题是任何人都可以编辑该文本files.So我可以将它们隐藏在exe文件中
python版本2.7
安装脚本: pygame2exe
如果有可能,我可以在没有额外模块的情况下完成。 更新:我显然需要以某种方式加密文本。你能建议一些简单加密alghoritham吗? 请注意,我使用数字和换行符。
我仍然希望将文件放入exe。
答案 0 :(得分:1)
对于此算法使用强加密没什么意义,因为您的程序需要访问解密密钥,因此如果确定的用户查看您的程序代码,他们可以找出您的程序存储的位置关键以及它用它做什么。真的,阅读&理解.pyc中的代码比读取.py更困难,但它比打破良好的加密要容易得多。
无论如何,这里有一些代码可以对任意字符串进行简单的加密/解密。如果字符串不是非常随机的,它最有效,并且它对长字符串比短字符串更好。
要加密,它首先使用gzip压缩数据,这不仅可以使数据更小,还可以减少数据中的模式数量,从而提高加密质量。然后,它使用范围(256)中的一系列随机整数对每个字节的整数值(在压缩数据中)进行异或运算,以生成编码版本。
在这种意义上,XOR运算是对称的:如果a = b ^ c,则b = a ^ c(以及c = a ^ b)。因此,要撤消XORing,我们只需再次应用它。
因此,要解密,我们只需反转加密过程。首先,我们将编码版本与我们用于编码的相同系列的随机整数进行异或,然后将其解压缩。
如果您要隐藏的数据量相当小或高度随机,您可以跳过压缩/解压缩步骤,因为从一个好的伪随机数生成器(如Mersenne Twister那样的Python)进行异常处理默认情况下使用)实际上是一种非常好的加密形式,假设攻击者不知道生成随机数的算法和随机序列的种子。 (请注意,Python的random.seed()接受任何可散列对象作为种子:例如int,字符串,甚至是元组。)
下面的代码使用年度日历作为测试数据,以便于查看流程是否有效。
<强> gzipcrypt.py 强>
#! /usr/bin/env python
''' Simple encryption
Encode by gziping then XORing bytes with a pseudorandom stream
Decode by XORing and then unziping with the same pseudorandom stream
Written by PM 2Ring 2014.09.28
'''
import random
import sys
from calendar import calendar
def randoms(seed):
random.seed(seed)
while True:
yield random.randint(0, 255)
def xorcrypt(data, key):
return str(bytearray(d ^ k for d, k in
zip(bytearray(data), randoms(key))))
def zipcrypt(data, key):
return xorcrypt(data.encode('zlib_codec'), key)
def decryptzip(data, key):
return xorcrypt(data, key).decode('zlib_codec')
def main():
#Test encryption & decryption
key = sys.argv[1] if len(sys.argv) > 1 else 42
data = calendar(2014)
print data
print 'Length:', len(data), '\n'
#code = xorcrypt(data, key)
code = zipcrypt(data, key)
print `code`
print 'Length:', len(code), '\n'
#newd = xorcrypt(code, key)
newd = decryptzip(code, key)
print newd
print newd == data
if __name__ == '__main__':
main()
修改强>
这是一个更简单的xorcrypt()版本,它不使用生成器函数bytearray()
,或者希望更易于理解的列表推导。
def xorcrypt1(data, key):
random.seed(key)
code = []
for ch in data:
n = ord(ch)
n = n ^ random.randint(0, 255)
code.append(chr(n))
return ''.join(code)