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基础教程之对象和类的实际运用
Aug 29 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
python验证码识别的示例代码
Sep 21 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
10张动图学会python循环与递归问题
Feb 06 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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判断变量是否为0的方法
2014/02/08 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Python基于Faker假数据构造库
2020/11/30 Python
python中实现词云图的示例
2020/12/19 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
实验教师岗位职责
2014/02/13 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
环保建议书300字
2014/05/14 职场文书
公司经营目标责任书
2015/01/29 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript