在日常生活当中,我们经常需要对数据进行加密,比如,聊天软件中的聊天信息等等,这些私密的信息都需要进行加密后才能在网络当中传输,以免放置信息的泄露,常用的加密算法有很多,我们今天要学习的这种加密方式叫做凯撒密码,那么,什么是凯撒密码呢?我们先用一个视频来了解一些什么是凯撒密码:
1.ASCII码的概念
在开始之前,我们先来了解一下ASCII码,我们都知道在计算机当中,所有的数据都是用二进制来进行表示的,因此,如果我要存储字符,那么我们就要将字符进行编码,因此ASCLL码就此诞生,ASCII码是一种通用规范,因此,无论对于任何编程语言来说,都可以使用ASCII码
ASCII码有一个表格,展示了字符与数字的对应,表格如下:
如上表所示,不同的字符对应不同的数字,比如大写字母“A”对应的数字的十进制就是65,那么在计算机当中65就是A的ASCII码编码。
2.字符串和ASCII码的转换
在Python中也提供了相应的函数用于将ASCII码与字符串进行相互的转换
ord() #ord()函数,括号当中接受一个字符长度的字符串,返回一个整型,也就是字符的ASCII码
chr() #chr()函数,括号当中接受一个整数(0-255),返回这个整数对应的字符串
我们可以使用print
打印出相应的结果看看
char_number=ord("A")
print("A的ASCLL码是:{}".format(char_number))
char_a=chr(66)
print("66所对应的字符为:{}".format(char_a))
# A的ASCLL码是:65
# 66所对应的字符为:B
有了这两个函数之后,我们就能来看看这个问题了,这个问题也是实现凯撒密码的关键性问题
输入一个字符,输出这个字符向后移动13个字符的结果
char_a=input("请输入字符:")
if len(char_a)!=1:
print("字符数超过限制")
else:
char_number=ord(char_a)
new_char=chr(char_number+13)
print("移动后的字符为:",new_char)
# 请输入字符:a
# 移动后的字符为: d
如果输入的字符移动三位后,超过了字符z该怎么办?
char_a=input("请输入字符:")
char_number=ord(char_a)
new_char=chr(char_number+13) #计算移动后的结果
if len(char_a)!=1:
print("字符数超过限制")
elif char_number+13>122:
new_number=ord(new_char)
new_number=new_number-122+96
print("移动后的字符为:",chr(new_number))
else:
print("移动后的字符为:",new_char)
# 请输入字符:z
# 移动后的字符为: m
3. 凯撒密码的实现
那么,有了以上这些铺垫之后,我们就可以自己来实现凯撒密码加密器了,由于用户输入的字符串,当中可能有大写的字母也有小写的字母,我们先将用户的字符全部改成大写在进行加密操作
upper() #使用upper()函数可以将字符串中的所有字符都转换成大写
那么,根据我们上面的分析,我们就可以写出凯撒加密的小程序了
input_char=input("请输入要加密的字符串:")
#将字符串全部转换为大写
input_char=input_char.upper()
#建立空字符串保存结果
output=""
for i in range(len(input_char)):
x=input_char[i] #提取单个字符
value=ord(x)+13 #获取字符转换后的ASCII码
if value>90: #如果超过了Z,则需要做的转换,90刚好是Z的ASCII码
value=value-90+64
output+=chr(value)
else:
output+=chr(value)
print("加密后的字符:",output);
# 请输入要加密的字符串:zcvzcvzssdd
# 加密后的字符: MPIMPIMFFQQ
4.综合练习
1.请写出解密小程序,按照向右移动13位的原则,输入密文,得到明文(明文都是小写)
可以使用:lower()转换成小写字符
# 示例
# 请输入明文:MPI
# 解密后的字符: zcv
2.输入一个明文,明文包含大小写,按照向右移动13位的原则转换成凯撒密码后,依然保持大小写不变
提示:将大小写分开处理
# 示例
# 请输入明文:ADFADadfadf
# 解密后的字符: NQSNQnqsnqs
1 条评论
太棒了:@(欢呼)