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中for循环下的索引变量的作用域
Apr 15 Python
浅析Python中的多条件排序实现
Jun 07 Python
numpy数组拼接简单示例
Dec 15 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
windows下python安装pip图文教程
May 25 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
使用python socket分发大文件的实现方法
Jul 08 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
python中sys模块的介绍与实例
Apr 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 在线打包_支持子目录
2008/06/28 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
Javascript Select操作大集合
2009/05/26 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Sanic框架应用部署方法详解
2018/07/18 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
python如何求圆的面积
2020/07/01 Python
详解如何修改python中字典的键和值
2020/09/29 Python
戴森英国官网:Dyson英国
2019/05/07 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
你常见到的runtime exception
2016/09/05 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
优秀部门获奖感言
2014/02/14 职场文书
应届生找工作求职信
2014/06/24 职场文书
红色故事汇观后感
2015/06/18 职场文书
css3 文字断裂效果
2022/04/22 HTML / CSS