900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 凯撒密码的实践使用-2--加密 解密的python代码事项

凯撒密码的实践使用-2--加密 解密的python代码事项

时间:2020-04-05 03:46:47

相关推荐

凯撒密码的实践使用-2--加密 解密的python代码事项

import stringdef temp():# print(string.ascii_letters)# print(string.ascii_lowercase)# print(string.ascii_uppercase)# 获取26个英文大写字母的字符串print(string.ascii_uppercase)print(len(string.ascii_uppercase))print(type(string.ascii_uppercase))"""凯撒密码:本质:A B C D EA B C D E移动一定的位置后,获取对应移动后的字符,这里面的‘偏移量就是2也就是shift=2生成key代码说明;upperchar26=string.ascii_uppercase #获取26个大写字母的字符串keydic={} 获取一个字典keydic={原始字符:移动后的字符},后期加密或者解密使用的对应字典gennerate_key(shift) 里面的shift是偏移量keydic[char]=upperchar26[(num+shift)%len(upperchar26)]-->keydic={原始字符:移动后的字符}shift=2后generate_key产生的结果,都是偏移了两位{'A': 'C', 'B': 'D', 'C': 'E', 'D': 'F', 'E': 'G', 'F': 'H', 'G': 'I', 'H': 'J', 'I': 'K', 'J': 'L', 'K': 'M', 'L': 'N', 'M': 'O', 'N': 'P', 'O': 'Q', 'P': 'R', 'Q': 'S', 'R': 'T', 'S': 'U', 'T': 'V', 'U': 'W', 'V': 'X', 'W': 'Y', 'X': 'Z', 'Y': 'A', 'Z': 'B'}"""def generate_key(shift):upperchar26=string.ascii_uppercasekeydic={}num=0for char in upperchar26:keydic[char]=upperchar26[(num+shift)%len(upperchar26)]num+=1return keydic"""加密函数,参数message是需要加密的字符串从’message‘需要加密的字符串中遍历取出所有字符串--->判断取出的每个字符是不是在keydic这个字典中,如果在里面就是取出字典中对应偏移量的字符如果没有在里面就是保持原来的字符,“ABCD-EFGH-JKLM”中的’-‘就是保持原来的样子"""def encrypt(keydic,message):ciphers=""for c in message:if c in keydic:ciphers+=keydic[c]else:ciphers+=creturn ciphers"""函数的实现if c in string.ascii_uppercase:,判断c是不是26个大写字母中的一个,如果是的话就是减去shift偏移量如果不是26个大写字母中的一个的话,就是保持原来的样子这里面用到两个函数ord()--->把单个字符转换成数字chr()---->把单个数字转换成字符这两个函数是正反向关系"""def cryjiemi(message,shift):crystrs=""for c in message:if c in string.ascii_uppercase: #跟前面加密算法呼应,只对大写字母进行转换,其他字符保持原来的样子digt=ord(c)-shiftcrystrs+=chr(digt)else:crystrs +=creturn crystrsif __name__ == '__main__':crykeydic=generate_key(2)# crykeydic=generate_key(26)# print(crykeydic)#待加密的字符messages="ABCD-EFGH-JKLM"# messages="ABCDEFGHJKLM"#进行加密处理,获取加密后的字符print(f"原始的字符串是:{messages}")ciphers=encrypt(crykeydic,messages)# print(ciphers)print(f"加密后的字符串是:{ciphers}")print("======解密中...=======")crystrs=cryjiemi(ciphers,2)print(f"解密的字符串是:{crystrs}")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。