Python实现简单的可逆加密程序实例
本文实例讲述了Python实现简单的可逆加密程序。分享给大家供大家参考。具体如下:
Python代码如下:
#coding=utf-8
'''''
Description:可逆的加密与解密
Environment:python2.5.x
Author:idehong@gmail.com
'''
importos
importsys
classCode(object):
'''''可逆的加密与解密'''
def__init__(self,key="idehong@gmail.com"):
self.__src_key=key
self.__key=self.__get_strascii(self.__src_key,True)
defencode(self,value):
'''''加密函数,加密后为一串数字'''
return "%d"%(self.__get_strascii(value,True)^self.__key)
defdecode(self,pwd):
'''''解密函数'''
ifself.is_number(pwd):
returnself.__get_strascii((int(pwd))^self.__key,False)
else:
print'requirenumber.'
defreset_key(self,key):
'''''重新设置key'''
self.__src_key=key
self.__key=self.__get_strascii(self.__src_key,True)
#===============================================================================
# 内部调用接口
#===============================================================================
def__get_strascii(self,value,bFlag):
ifbFlag:
returnself.__get_str2ascii(value)
else:
returnself.__get_ascii2str(value)
def__get_str2ascii(self,value):
ls=[]
foriinvalue:
ls.append(self.__get_char2ascii(i))
returnlong("".join(ls))
def__get_char2ascii(self,char):
'''''获取单个字符的acsii码值'''
try:
return"%03.d"%ord(char)
except(TypeError,ValueError):
print"keyerror."
exit(1)
def__get_ascii2char(self,ascii):
ifself.is_ascii_range(ascii):
returnchr(ascii)
else:
print"asciierror(%d)"%ascii
exit(1)
def__get_ascii2str(self,n_chars):
ls=[]
s="%s"%n_chars
n,p=divmod(len(s),3)
ifp>0:
nRet=int(s[0:p])
ls.append(self.__get_ascii2char(nRet))
pTmp=p
whilepTmp<len(s):
ls.append(self.__get_ascii2char(int(s[pTmp:pTmp+3])))
pTmp+=3
return"".join(ls)
#================================================================================
# 工具接口
#================================================================================
defis_number(self,value):
try:
int(value)
returnTrue
except(TypeError,ValueError):
pass
returnFalse
defis_ascii_range(self,n):
return0<=n<256
defis_custom_ascii_range(self,n):
return33<=n<48or58<=n<126
classUsage(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'],
}
defhelp(self,*k):
strHelp="Usage:pwd[-options][args...]whereoptioninclude:"
strHelp+="""
-?-help printthishelpmessage
-k<key_str>-p<pwd_str>
-k<key_str>-t<text_str>"""
printstrHelp
defargs(self,argv_ls):
'''''dispatchcommand'''
# printargv_ls
iflen(argv_ls)<=1orlen(argv_ls)>5:
print'Unrecognizedoption'
return
cmd_dic={}
curr_cmd=''
#controlcommand
fori,vinenumerate(argv_ls[1:]):
forjinself._args_dic.items():
#addcommand
ifvinj[1]andj[0]notincmd_dic:
curr_cmd=j[0]
cmd_dic[curr_cmd]=[]
break
else:
#addargv
ifcmd_dic:
cmd_dic[curr_cmd].append(v)
#execcommand
ifcmd_dic:
self.exec_cmd(cmd_dic)
else:
print'Unrecognizedoption'
defexec_cmd(self,cmd_dic):
'''''execcmd'''
iflen(cmd_dic)==2:
if'arg_p'incmd_dicand'arg_k'incmd_dic\
andlen(cmd_dic['arg_p'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.encode(cmd_dic['arg_p'][0])
return
elif'arg_t'incmd_dicand'arg_k'incmd_dic\
andlen(cmd_dic['arg_t'])==1andlen(cmd_dic['arg_k'])==1:
self._clsWork.reset_key(cmd_dic['arg_k'][0])
printself._clsWork.decode(cmd_dic['arg_t'][0])
return
self.help()
if__name__=='__main__':
usage=Usage()
usage.args(sys.argv)希望本文所述对大家的Python程序设计有所帮助。