Python 使用py2exe/pygame2exe在exe中隐藏高分文本文件
我在游戏中有一个高分系统,是我在Python 使用py2exe/pygame2exe在exe中隐藏高分文本文件,python,text,pygame,exe,py2exe,Python,Text,Pygame,Exe,Py2exe,我在游戏中有一个高分系统,是我在Pygame中制作的,它将名字和分数保存在文本文件name.txt和score.txt中,但问题是任何人都可以编辑这些文本文件。所以我可以将它们隐藏在exe文件中。 python版本2.7 安装脚本:pygame2exe 如果可能的话,我可以不用额外的模块来做。 更新:我显然需要以某种方式加密文本。你能推荐一些简单的加密算法吗? 请注意,我使用数字和换行符 我仍然希望将文件放在exe中。对该算法使用强加密没有多大意义,因为您的程序需要访问解密密钥,因此,如果确定的
Pygame
中制作的,它将名字和分数保存在文本文件name.txt
和score.txt
中,但问题是任何人都可以编辑这些文本文件。所以我可以将它们隐藏在exe文件中。python版本2.7
安装脚本:pygame2exe 如果可能的话,我可以不用额外的模块来做。 更新:我显然需要以某种方式加密文本。你能推荐一些简单的加密算法吗? 请注意,我使用数字和换行符
我仍然希望将文件放在exe中。对该算法使用强加密没有多大意义,因为您的程序需要访问解密密钥,因此,如果确定的用户查看您的程序代码,他们可以找出您的程序存储密钥的位置以及密钥的用途。诚然,读取和理解.pyc中的代码比读取.py要困难一些,但仍然比破坏良好的加密容易得多 无论如何,这里有一些代码可以对任意字符串进行简单的加密/解密。如果字符串不是非常随机的,那么它工作得最好,而且它在长字符串上比短字符串上工作得更好 为了加密,它首先使用gzip压缩数据,这不仅可以使数据更小,还可以减少数据中的模式数量,从而提高加密质量。然后,它将每个字节(压缩数据中)的整数值与范围(256)内的一系列随机整数进行异或运算,以生成编码版本 从这个意义上说,异或运算是对称的:如果a=b^c,那么b=a^c(也就是c=a^b)。所以要撤销XORing,我们只需再次应用它 所以要解密,我们只需反转加密过程。首先,我们用我们用来编码的同一系列随机整数对编码版本进行异或运算,然后解压它 如果要隐藏的数据量非常小或非常随机,则可以跳过压缩/解压缩步骤,因为使用一个好的伪随机数生成器(如Python默认使用的Mersenne Twister)中的一系列随机字节进行XORing实际上是一种非常好的加密形式,假设攻击者不知道生成随机数的算法和随机序列的种子。(请注意,Python的random.seed()接受任何可哈希对象作为种子:例如int、string甚至tuple) 下面的代码使用一年中的日历作为测试数据,以便于查看流程是否正常工作 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)
py2exe exe文件实际上是压缩文件。因此,即使您将文件保存在exe中,任何人都可以正确打开它“隐藏”文件需要加密,这是一个巨大的主题。那么我应该使用什么模块进行加密。我不相信有人会为了获得更多分数而如此努力。如果您相信没有人会真的如此努力地获得分数,尝试
rot13
算法,这是一种非常简单的加密方案。通常,您不能假设当前用户可以写入您正在运行的当前可执行文件。只是碰巧Windows在Vista之前没有基本的安全性,所以很多人养成了坏习惯。相反,您必须始终写入每个用户位置的文件(Windows上的APPDATA,其他地方的XDG_DATA_HOME)谢谢,当我更好地学习python和密码学时,我可能会尝试类似的方法,但我想我会选择一些ascii值加密。我搜索了简单的加密,找到了Base64。我可以在加密时保留换行符吗?当然,Base64可以编码任何ascii字符。但这只是一种简单的编码,我不会称之为加密方法。当您想要将任意二进制数据编码为安全的可打印字符时,它非常有用。我想它可能适合您的需要,但使用我的xorcrypt()
并不难。只需将random
导入脚本并粘贴到myxorcrypt()
和randoms()
函数中,就可以了。:)当然我可以这么做,但我喜欢当我明白我在做什么的时候,有人知道我怎么能把它隐藏在exe aniway中吗???我刚刚想起我的游戏是开源的(facepalm),它在Windows中运行吗?正如o11c上面所说,操作系统可能不允许.exe修改其磁盘上的文件。