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语言实现机器学习算法的三大理由
Nov 15 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python实现黑客字幕雨效果
Jun 21 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
pip安装python库的方法总结
Aug 02 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
python 基于opencv操作摄像头
Dec 24 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 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实现的一个简单json rpc框架实例
2015/03/30 PHP
PHP读取Excel类文件
2017/05/15 PHP
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
pandas中去除指定字符的实例
2018/05/18 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python实现网站表单提交和模板
2019/01/15 Python
python字符串循环左移
2019/03/08 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
总裁秘书岗位职责
2013/12/04 职场文书
银行门卫岗位职责
2013/12/29 职场文书
客户表扬信范文
2014/01/10 职场文书
表彰先进集体通报
2014/01/12 职场文书
迎新晚会邀请函
2014/02/01 职场文书
寒假致家长的一封信
2015/10/10 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android