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 Django做网页
Nov 04 Python
python中List的sort方法指南
Sep 01 Python
python实现给字典添加条目的方法
Sep 25 Python
python实现删除文件与目录的方法
Nov 10 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
Python 列表理解及使用方法
Oct 27 Python
Python 函数基础知识汇总
Mar 09 Python
解决python读取几千万行的大表内存问题
Jun 26 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
如何在python中实现ECDSA你知道吗
Nov 23 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 define()函数及defined()函数使用详解
2013/06/09 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python中super的用法实例
2015/05/28 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
TensorFlow的权值更新方法
2018/06/14 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
详解python之heapq模块及排序操作
2019/04/04 Python
基于python的Paxos算法实现
2019/07/03 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
利用python绘制正态分布曲线
2021/01/04 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
数学教学随笔感言
2014/02/17 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
深入浅析Django MTV模式
2021/09/04 Python