Python实现简单的可逆加密程序实例


Posted in Python onMarch 05, 2015

本文实例讲述了Python实现简单的可逆加密程序。分享给大家供大家参考。具体如下:

Python代码如下:

#coding=utf-8   

'''''  

    Description: 可逆的加密与解密  

    Environment: python2.5.x  

    Author:idehong@gmail.com  

''' 

import os   

import sys   

class Code(object):   

    '''''可逆的加密与解密''' 

    def __init__(self, key = "idehong@gmail.com"):   

        self.__src_key = key   

        self.__key = self.__get_strascii(self.__src_key, True)   

    def encode(self, value):   

        '''''加密函数, 加密后为一串数字''' 

        return  "%d" % (self.__get_strascii(value, True) ^ self.__key)   

    def decode(self, pwd):   

        '''''解密函数''' 

        if self.is_number(pwd):   

            return self.__get_strascii( (int(pwd)) ^ self.__key, False )   

        else:   

            print 'require number.' 

    def reset_key(self, key):   

        '''''重新设置key''' 

        self.__src_key = key   

        self.__key = self.__get_strascii(self.__src_key, True)   

#===============================================================================   

#        内部调用接口   

#===============================================================================   

    def __get_strascii(self, value, bFlag):   

        if bFlag:   

            return self.__get_str2ascii(value)    

        else:   

            return self.__get_ascii2str(value)   

    def __get_str2ascii(self, value):   

        ls = []   

        for i in value:   

            ls.append( self.__get_char2ascii( i ) )   

        return long("".join(ls))   

    def __get_char2ascii(self, char):   

        '''''获取单个字符的acsii码值''' 

        try:   

            return "%03.d" % ord(char)   

        except (TypeError, ValueError):   

            print "key error." 

            exit(1)   

    def __get_ascii2char(self, ascii):   

        if self.is_ascii_range(ascii):   

            return chr(ascii)   

        else:   

            print "ascii error(%d)" % ascii   

            exit(1)          

    def __get_ascii2str(self, n_chars):   

        ls = []   

        s = "%s" % n_chars   

        n, p = divmod(len(s), 3)   

        if p > 0:   

            nRet = int(s[0 : p])   

            ls.append( self.__get_ascii2char(nRet))   

        pTmp = p   

        while pTmp < len(s):   

            ls.append( self.__get_ascii2char( int(s[pTmp: pTmp + 3])) )

            pTmp += 3 

        return "".join(ls)   

#================================================================================   

#        工具接口   

#================================================================================   

    def is_number(self, value):   

        try:   

            int(value)   

            return True 

        except (TypeError, ValueError):   

            pass 

        return False 

    def is_ascii_range(self, n):   

        return 0 <= n < 256 

    def is_custom_ascii_range(self, n):   

        return 33 <= n <48 or 58 <= n < 126         

class Usage(object):   

    '''''  

    命令行参数读取与解析  

    ''' 

    def __init__(self):   

        self._clsWork = Code()   

        self._args_dic = {'arg_help' : ['-?', '-help'],    

                    'arg_p' : ['-p', '-pwd'],   

                    'arg_t' : ['-t', '-text'],   

                    'arg_k' : ['-k', '-key'],   

                    }           

    def help(self, *k):   

        strHelp = "Usage: pwd [-options] [args...] where option include:" 

        strHelp += """  

        -? -help                    print this help message  

        -k <key_str> -p <pwd_str>  

        -k <key_str> -t <text_str>""" 

        print strHelp     

    def args(self, argv_ls):    

        '''''dispatch command'''    

#        print argv_ls   

        if len(argv_ls) <= 1 or len(argv_ls) > 5:   

            print 'Unrecognized option' 

            return 

        cmd_dic = {}   

        curr_cmd = ''  

        # control command   

        for i, v in enumerate(argv_ls[1:]):   

            for j in self._args_dic.items():   

                # add command   

                if v in j[1] and j[0] not in cmd_dic:   

                    curr_cmd = j[0]   

                    cmd_dic[curr_cmd] = []   

                    break 

            else:   

                # add argv   

                if cmd_dic:   

                    cmd_dic[curr_cmd].append(v)               

        # exec command   

        if cmd_dic:   

            self.exec_cmd(cmd_dic)   

        else:   

            print 'Unrecognized option' 

    def exec_cmd(self, cmd_dic):     

        '''''exec cmd'''        

        if len(cmd_dic) == 2:   

            if 'arg_p' in cmd_dic and 'arg_k' in cmd_dic\   

                and len(cmd_dic['arg_p']) == 1 and len(cmd_dic['arg_k']) == 1:   

                self._clsWork.reset_key(cmd_dic['arg_k'][0])   

                print self._clsWork.encode(cmd_dic['arg_p'][0])   

                return 

            elif 'arg_t' in cmd_dic and 'arg_k' in cmd_dic\   

                and len(cmd_dic['arg_t']) == 1 and len(cmd_dic['arg_k']) == 1:   

                self._clsWork.reset_key(cmd_dic['arg_k'][0])   

                print self._clsWork.decode(cmd_dic['arg_t'][0])   

                return 

        self.help()   

if __name__ == '__main__':   

    usage = Usage()   

    usage.args(sys.argv)

希望本文所述对大家的Python程序设计有所帮助。
Python 相关文章推荐
python正则表达式re模块详解
Jun 25 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
将python代码和注释分离的方法
Apr 21 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
python实现BP神经网络回归预测模型
Aug 09 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python3爬虫中异步协程的用法
Jul 10 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 Python
Python装饰器的函数式编程详解
Feb 27 #Python
python分析nignx访问日志脚本分享
Feb 26 #Python
python分析apache访问日志脚本分享
Feb 26 #Python
Python构造函数及解构函数介绍
Feb 26 #Python
python中的__slots__使用示例
Feb 26 #Python
Python map和reduce函数用法示例
Feb 26 #Python
Python中运行并行任务技巧
Feb 26 #Python
You might like
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
9种python web 程序的部署方式小结
2014/06/30 Python
Python MD5加密实例详解
2017/08/02 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python实现三次样条插值
2018/12/17 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
Python中new方法的详解
2019/01/15 Python
python redis 删除key脚本的实例
2019/02/19 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Django实现发送邮件功能
2019/07/18 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python Collatz序列实现过程解析
2019/10/12 Python
如何用Python徒手写线性回归
2021/01/25 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
公积金单位接收函
2014/01/11 职场文书
省三好学生申请材料
2014/01/22 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书