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中使用Inotify监控文件实例
Feb 14 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
Pycharm如何打断点的方法步骤
Jun 13 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
基于python实现matlab filter函数过程详解
Jun 08 Python
Python网络编程之ZeroMQ知识总结
Apr 25 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
Terran兵种介绍
2020/03/14 星际争霸
Yii 2.0中场景的使用教程
2017/06/02 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python 常用string函数详解
2016/05/30 Python
Python脚本处理空格的方法
2016/08/08 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
pyhton列表转换为数组的实例
2018/04/04 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python实现图片筛选程序
2018/10/24 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
金融专业应届生求职信
2013/11/02 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
父亲节活动策划方案
2014/08/24 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
vscode内网访问服务器的方法
2022/06/28 Servers