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中的CURL PycURL使用例子
Jun 01 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python判断Abundant Number的方法
Jun 15 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
Python turtle编写简单的球类小游戏
Mar 31 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
DC动漫人物排行
2020/03/03 欧美动漫
PHP4.04简明安装
2006/10/09 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python functools模块学习总结
2015/05/09 Python
Python中IPYTHON入门实例
2015/05/11 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
Python3多线程基础知识点
2019/02/19 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
python 带时区的日期格式化操作
2020/10/23 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
诚信承诺书模板
2014/05/26 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
2015年库房工作总结
2015/04/30 职场文书
在职证明书模板
2015/06/15 职场文书
演讲比赛主持词
2015/06/29 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
Python合并pdf文件的工具
2021/07/01 Python