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 相关文章推荐
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
Python socket编程实例详解
May 27 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
python全局变量引用与修改过程解析
Jan 07 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
PyQt5实现登录页面
May 30 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
pytest进阶教程之fixture函数详解
Mar 29 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
APMServ使用说明
2006/10/23 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
Python中tell()方法的使用详解
2015/05/24 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
python3实现飞机大战
2020/11/29 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
员工工作表现评语
2014/04/26 职场文书
岗位职责说明书
2014/05/07 职场文书
汽修专业自荐信
2014/07/07 职场文书
社区娱乐活动方案
2014/08/21 职场文书
就业协议书
2014/09/12 职场文书
布达拉宫导游词
2015/02/02 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
小学生作文写作技巧100例,非常实用!
2019/07/08 职场文书