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根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
python实现实时监控文件的方法
Aug 26 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
为什么Python中没有&quot;a++&quot;这种写法
Nov 27 Python
python实现烟花小程序
Jan 30 Python
python 同时读取多个文件的例子
Jul 16 Python
Python数据存储之 h5py详解
Dec 26 Python
python安装和pycharm环境搭建设置方法
May 27 Python
解决python存数据库速度太慢的问题
Apr 23 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
python之django路由和视图案例教程
Jul 26 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 auth_http类库进行身份效验
2009/03/19 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php技巧小结【推荐】
2017/01/19 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
JS判断数组那点事
2017/10/10 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现合并两个列表的方法分析
2018/05/28 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
戴尔美国官网:Dell
2016/08/31 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
生态学毕业生自荐信
2013/10/27 职场文书
销售辞职报告范文
2014/01/12 职场文书
有关打架的检讨书
2014/01/25 职场文书
志愿者活动总结报告
2014/06/27 职场文书
董事长岗位职责
2015/02/13 职场文书
毕业生入职感言
2015/07/31 职场文书
大学军训心得体会800字
2016/01/11 职场文书
六年级作文之关于梦
2019/10/22 职场文书
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android