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

934次阅读  |  发布于5年以前

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8