注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

眼睛想旅行

技术就是我的生命与信仰!

 
 
 

日志

 
 
关于我

精通C,C++,python,Erlang。并熟悉各种其他编程语言,用cocos2dx游戏引擎作过几个项目。会MySQL增删改查,了解OpenGL渲染原理。懂单片机,能设计数字电路系统,会画电路图和设计电路板。喜欢了解最新前沿技术,并持续关注和学习新技术。

网易考拉推荐

使用python对txt文本文档简单加密  

2016-03-30 14:35:01|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天想到自已有一些个人数据什么的常常会存在服务器上,或者邮件中,或者网盘上。因为不想因为帐号被盗,这些个人数据会轻易就被别人看到,想对文件进行加密,想到了使用一个密钥与文档中的数据进行异或运算,在解密的时候再使用同样的密钥与数据再进行一次异或运算就可对数据进行解密,所以这里想到使用语法最简单的python来作这个事,也没有想过用c语言,因为C语言如果给别人用,在不同的并台上还要再编译后再能用。
先上源码:

#-*- 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码才行。


欢迎转载:
转载请注明出处:http://fengmm521.blog.163.com/blog/static/25091358201623021347813/
  评论这张
 
阅读(166)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017