#-*- coding: utf-8 -*-
#加密测试
import os,sys
import numpy
codepw = 'testpassword'
#获取脚本路径
def cur_file_dir():
pathx = sys.argv[0]
path,_file = os.path.split(pathx)
if cmp(path,'') == 0:
path = sys.path[0]
#判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径
if os.path.isdir(path):
return path
elif os.path.isfile(path):
return os.path.dirname(path)
#获取父目录
def GetParentPath(strPath):
if not strPath:
return None;
lsPath = os.path.split(strPath);
if lsPath[1]:
return lsPath[0];
lsPath = os.path.split(lsPath[0]);
return lsPath[0];
#获取所有界面的json文件列表
def getAllExtFile(path,fromatx = ".txt"):
jsondir = path
jsonfilelist = []
for root, _dirs, files in os.walk(jsondir):
for filex in files:
#print filex
name,text = os.path.splitext(filex)
if cmp(text,fromatx) == 0:
jsonArr = []
rootdir = path
dirx = root[len(rootdir):]
pathName = dirx +os.sep + filex
jsonArr.append(pathName)
(newPath,_name) = os.path.split(pathName)
jsonArr.append(newPath)
jsonArr.append(name)
jsonfilelist.append(jsonArr)
return jsonfilelist
def getAllTxtFileFromDir(txtpath = '/Users/fengmm521/Documents/ebook/book'):
txts = getAllExtFile(txtpath,'.txt')
txtfs = []
for dx in txts:
txtfs.append(txtpath + dx[0])
print txtfs
return txtfs
def getAllPxtFileFromDir(txtpath = ''):
txts = getAllExtFile(txtpath,'.ptx')
txtfs = []
for dx in txts:
txtfs.append(txtpath + dx[0])
return txtfs
def ecodeTxtFileAndSave(txtf,pw = 'password'):
f = open(txtf,'r')
txtstr = f.read()
f.close()
ptxtstr = []
print txtstr[0:10]
pwn = 0
for c in txtstr:
if pwn >= len(pw):
pwn = 0
ptxtstr.append(ord(c)^ord(pw[pwn]))
pwn += 1
print len(ptxtstr)
print len(txtstr)
print ptxtstr
(newPath,_extname) = os.path.splitext(txtf)
(pathx,filename) = os.path.split(newPath)
print pathx
print filename
savefname = filename + '.ptx'
fsave = open(savefname,'w')
ary = numpy.asarray(ptxtstr)
ary.astype('float').tofile(fsave)
fsave.close()
def decodeTxtFromFilePath(txtf,pw = 'password'):
ptxfile = open(txtf,'r')
xtx = numpy.fromfile(ptxfile)
ptxfile.close()
ptxtstr = list(xtx)
pxtmp = ''
pwn = 0
for c in ptxtstr:
if pwn >= len(pw):
pwn = 0
pxtmp += chr(int(c)^ord(pw[pwn]))
pwn += 1
print ptxtstr
print pxtmp
def ecodeAllFileAndSave():
txtfs = getAllTxtFileFromDir()
if txtfs:
for tx in txtfs:
ecodeTxtFileAndSave(tx)
def decodeAllTxtFromFile():
txtfs = getAllPxtFileFromDir(cur_file_dir())
for ftmp in txtfs:
decodeTxtFromFilePath(ftmp)
print txtfs
def main():
ecodeAllFileAndSave()
decodeAllTxtFromFile()
if __name__ == '__main__':
main()
这里有一些处理方法在别的地方可能大家会用的上,像:
1.如何对字符串中每一个字符转为ascii码,以及如何将ascii码转为字符的两个函数
ord(c):
这个python函数的主要功能是将字符转为ascii码整数
chr(i):
这个函数的功能自然就是将整数的ascii码转为字符
2.使用numpy模块的tofile(f)函数将list数据以二进制数据流的型式写入文件。
nuarray = numpy.asarray(list_type),可以将list数组转为numpy.array
为了将数据按整数写入文件,需要对数据转为float类型,如果系统是64位的,则在写入文件时会保存为float64。这样从文件中载入array后解析时就无法解析出ascii码。
所以要作以下astype('float')处理:
arraydat.astype('float').tofile(savefile)
3.使用numpy.fromfile(savefile),可以从文件中载入通过numpy.tofile(sf)保存的二进制数组
4.使用list(numpyarray),可以轻松将numpy.array转为list数组。
5.使用异或运算(^)只能对整数与整数操作。所以对字符使用异或加密时,要将字符转为ascii码才行。