'''
凯撒编码解码模块
@author Liao
@time 2020-1-19
'''
class kaisa:
'''
decodekaisa:解密函数
encodekaisa:加密函数
'''
def encodekaisa(self,plaintext="",key=1):
'''
对字符加密
:param plaintext:需要加密的字符串
:param key:移位值
:return:返回加密后的字符串
'''
string=""
for i in range(len(plaintext)):
if plaintext[i].__eq__(" "):
string+=" "
elif ord(plaintext[i])>=65 and ord(plaintext[i])<=90:
if ord(plaintext[i])+key>90:
string+=chr(ord(plaintext[i])+key-26)
elif ord(plaintext[i])+key<65:
string+=chr(ord(plaintext[i])+key+26)
else:
string+=chr(ord(plaintext[i])+key)
elif ord(plaintext[i])>=97 and ord(plaintext[i])<=122:
if ord(plaintext[i])+key>122:
string+=chr(ord(plaintext[i])+key-26)
elif ord(plaintext[i])+key<97:
string+=chr(ord(plaintext[i])+key+26)
else:
string+=chr(ord(plaintext[i])+key)
else:
string="error plaintext!"
break
self.Output("加密结果:"+string)
def decodekaisa(self,kaisacode,mode=0,key=1):
'''
对字符串进行解密
:param kaisacode:需要解密的字符串
:param mode:解密模式,0表示暴力破解,1表示密匙解密
:param key:密匙解密移位值
:return:返回解密后的明文
'''
string=""
if mode==0:#暴力破解
self.Output("暴力破解结果:")
for key in range(26):
for sign in kaisacode:
if sign.__eq__(" "):
string+=" "
elif ord(sign)>=65 and ord(sign)<=90:
if ord(sign) - key > 90:
string += chr(ord(sign) - key - 26)
elif ord(sign) - key < 65:
string += chr(ord(sign) - key + 26)
else:
string += chr(ord(sign) - key)
elif ord(sign) >= 97 and ord(sign) <= 122:
if ord(sign) - key > 122:
string += chr(ord(sign) - key - 26)
elif ord(sign) - key < 97:
string += chr(ord(sign) - key + 26)
else:
string += chr(ord(sign) - key)
else:
string = "error plaintext!"
break
self.Output(string)
string = ""
elif mode==1:#密匙破解
for sign in kaisacode:
if sign.__eq__(" "):
string += " "
elif ord(sign) >= 65 and ord(sign) <= 90:
if ord(sign) - key > 90:
string += chr(ord(sign) - key - 26)
elif ord(sign) - key < 65:
string += chr(ord(sign) - key + 26)
else:
string += chr(ord(sign) - key)
elif ord(sign) >= 97 and ord(sign) <= 122:
if ord(sign) - key > 122:
string += chr(ord(sign) - key - 26)
elif ord(sign) - key < 97:
string += chr(ord(sign) - key + 26)
else:
string += chr(ord(sign) - key)
else:
string = "error plaintext!"
break
self.Output("密匙破解结果:"+string)
else:
self.Output("error mode")
def Output(self,string):
'''
输出字符串
:param string: 需要输出的字符串
:return:
'''
print(string)
if __name__=="__main__":
ka=kaisa()
ka.encodekaisa("I love you",4)
ka.decodekaisa("M pszi csy",1,4)
ka.decodekaisa("M pszi csy")
代码有点冗余,还可以改进。
区分了大小写字母。
可以将需要加密的字符串统一转换成大写或小写,然后输出的时候可以通过选择来输出大小写。