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 相关文章推荐
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
python简单实现AES加密和解密
Mar 28 Python
python学习开发mock接口
Apr 28 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
使用pip安装python库的多种方式
Jul 31 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 Python
python3使用diagrams绘制架构图的步骤
Apr 08 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 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 调用远程url的六种方法小结
2009/11/02 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
php支付宝接口用法分析
2015/01/04 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
Python写入数据到MP3文件中的方法
2015/07/10 Python
Python3实现Web网页图片下载
2016/01/28 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python多项式回归的实现方法
2019/03/11 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
没编程基础可以学python吗
2020/06/17 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
eBay加拿大站:eBay.ca
2019/06/20 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
什么是会话Bean
2015/05/14 面试题
办公室经理岗位职责
2014/01/01 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP