Python实现简单的可逆加密程序实例

作者:Sephiroth 时间:2022-12-18 10:39:56 

本文实例讲述了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,加密
0
投稿

猜你喜欢

  • IE6与IE7的unshift 方法

    2010-01-19 13:59:00
  • Python高级特性之切片迭代列表生成式及生成器详解

    2021-06-25 23:10:13
  • 用javascript实现select的美化

    2007-05-11 16:50:00
  • Python多线程原理与用法实例剖析

    2023-07-22 13:40:37
  • Python Numpy实现计算矩阵的均值和标准差详解

    2021-12-20 09:51:20
  • Django-Scrapy生成后端json接口的方法示例

    2021-07-16 18:46:46
  • sqlserver通用的删除服务器上的所有相同后缀的临时表

    2012-06-06 20:07:34
  • 浅谈numpy广播机制

    2023-08-25 22:07:51
  • python编译pyc文件的过程解析

    2022-08-13 20:48:19
  • 详解Python的循环结构知识点

    2021-09-30 11:42:03
  • 优化Python代码使其加快作用域内的查找

    2021-09-25 06:40:13
  • 使用pandas模块实现数据的标准化操作

    2023-04-12 06:30:03
  • SQL Server的怪辟:异常与孤立事务

    2009-09-24 14:11:00
  • python ConfigParser库的使用及遇到的坑

    2021-08-13 05:45:23
  • python logging模块的分文件存放详析

    2023-04-02 20:27:32
  • QML使用Python的函数过程解析

    2021-12-10 19:20:31
  • 浅谈python中str字符串和unicode对象字符串的拼接问题

    2022-03-27 22:00:32
  • 在python中利用GDAL对tif文件进行读写的方法

    2022-03-25 08:08:07
  • 表单验证通用脚本(支持所有主流浏览器)

    2010-08-08 08:54:00
  • Python tornado队列示例-一个并发web爬虫代码分享

    2022-03-13 12:13:55
  • asp之家 网络编程 m.aspxhome.com