Python实现简单的可逆加密程序实例
admin
2023-07-31 02:17:43
0

本文实例讲述了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 -p  
        -k -t \”\”\”
        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程序设计有所帮助。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...