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压缩和解压缩zip文件
Feb 14 Python
Python中实现结构相似的函数调用方法
Mar 10 Python
Python lxml模块安装教程
Jun 02 Python
关于Django外键赋值问题详解
Aug 13 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
python3 实现口罩抽签的功能
Mar 11 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
pytorch中index_select()的用法详解
Jan 06 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
隐性调用php程序的方法
2015/06/13 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
利用Python如何生成随机密码
2016/04/20 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python函数的作用域及关键字详解
2019/08/20 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
化工机械应届生求职信
2013/11/04 职场文书
业务部经理岗位职责
2014/01/04 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
预备党员入党感想
2015/08/10 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python