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 相关文章推荐
使用Eclipse如何开发python脚本
Apr 11 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python 支付整合开发包的实现
Jan 23 Python
python爬取微信公众号文章的方法
Feb 26 Python
python设置环境变量的作用和实例
Jul 09 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
pytorch中的transforms模块实例详解
Dec 31 Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Pytorch转onnx、torchscript方式
May 25 Python
python和php学习哪个更有发展
Jun 17 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 MSSQL 存储过程的方法
2008/12/24 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
js变换显示图片的实例
2013/04/16 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python中的默认参数实例分析
2018/01/29 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
学年自我鉴定范文
2013/10/01 职场文书
销售文员岗位职责
2013/11/29 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
安全生产专项整治方案
2014/05/06 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers