今天是Andy学Python的第21天哦!
大家好,我是Andy。
今天学习了凯撒密码。
01.什么是凯撒密码
凯撒密码,是一种替换加密的技术,相传为罗马共和时期恺撒首创,曾用于军事通信加密,即明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。比如偏移量是1,那么a就应该写作b,b就应该写作c,以此类推,那么偏移量为+1时,come on加密后就写作dpnf po。解密也是同样的道理,一串密文XusXusOj,偏移量是-6,那么倒退回去,就是“DayDayUp”。
02.右移5位加密
2.1 如何将字母+5?
观察ASCII码表,根据字母可知晓其ASCII码,反过来知道ASCII码亦知字母。
A-Z:65-90
a-z:97-122
右移5位即ASCII码+5。
在转换过程中,使用ord()和chr()方法
print(ord('a')) #97
print(chr(98)) #b
反过来也可使用
print(str(ord('a'))) #97
print(chr(ord('b'))) #b
注意:str()与chr()之间的区别:
str()是把返回的对象直接转为字符串,而chr()则是把返回的对象转换为对应的ASCII码的字符串。
2.2 区分大小写
如何判断。
message = "Hello"
# upper():将字符串转换为大写
message1 = message.upper()
print(message1)
# isupper():判断字符串是否都为大写
print(message1.isupper())
# lower():将字符串转换为小写
message2 = message1.lower()
print(message2)
# islower():判断字符串是否都为小写
print(message2.islower())
2.3 防止意外
如果Z右移+5,密码应是E,但是ASCII码表对应是90+5=95,是下划线_。如果右移+5后ASCII码对应不是字母,应减26返回。
2.4 Andy答案
message = input("Enter the message:")
secret = ""
for letter in message:
if letter.isupper(): ###大写字母加密
value = ord(letter)+5
letter = chr(value)
if not (letter.isupper()):
value -= 26
letter = chr(value)
if letter.islower(): ###小写字母加密
value = ord(letter)+5
letter = chr(value)
if not (letter.islower()):
value -= 26
letter = chr(value)
secret += letter
print("Secret Message:",secret)
作业
如果信息是数字、字母混合类型,加密方式为左移3位,如何设计加密程序和解密程序?
Copyright © 2021 Andy学Python
转载事宜请留言 | 获得授权后方可转载
本平台所使用的电子版教材、视频属相关权利人所有。因客观原因部分作品若存在不当使用的情况,请相关权利人随时与我们联系,以协商授权事宜。
End
不会Python,将成为人工智能时代的新“文盲”!
欢迎加入零基础自学Python计划,未来100天,Andy会把自学Python学习笔记持续输出公众号、视频号,不定期更新,邀您观战、加油、评论,亦或围观Andy被打脸。
人到中年,你一定要努力,但千万别着急。
我是Andy,一个终身学习者。
欢迎关注公众号与视频号:Andy学Python。
网友评论