(共10张PPT)
一、加密
【搜】活动1
古老的“隐身术”,填表3.4.3
时间
加密方式
683年
拆字法。将明文中的文字进行组合生成新的字,即为密文,比如“十二月”合起来为“青”
北宋
代码法。北宋进士曾公亮曾搜集了40个常用军事短语,然后对其进行顺序编码:一、请弓;二、请箭;三、请刀;四、请甲;五、请枪旗;六、请锅幕;七、请马;八、请衣赐;九、请粮料……四十、战小胜。军队出征前,指挥机关将用上述短语编码的密码本发给将领,并约定用一首不含重复文字的40字五言律诗与密码相对应。
公元前五世纪
移位法。希罗多德(Herodotus)的《历史》中记载了公元前五世纪,希腊城邦和波斯帝国发生多次冲突和战争。这些战争中希腊城邦中广泛使用了移位法进行加密处理战争通讯信息,使波斯帝国难以获得希腊城邦的军事情报,也就无法提前做军事部署。希腊城邦用来传输军事信息、命令的每段文字都有固定的字数,接密者手中会有一份文字移位说明。解密者拿到密文后,根据文字移位说明进行解密,从而破解其中的军事命令或消息。
古罗马时期
《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。
第二次世界大战
密码机。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。
一、加密
加密就是将原始信息(数据)隐匿起来,使之在缺少特殊信息(数据)时不可读。
原始信息(数据)称为明文,加密后的信息(数据)称为密文。
将密文还原成明文的过程称为解密(或解码)。
【悟】加密与解密
恺撒在征服高卢、袭击日耳曼和不列颠的多次战斗中频繁使用加密技术。苏托尼厄斯在公元2世纪写的《恺撒传》中对恺撒用过的一种加密技术进行了详细的介绍。恺撒只是简单地将明文中的每一个字母用字母表中该字母后的第3个字母替换。例如,将明文中的a
用d替换,b用e替换,……,z用c替换,这就是恺撒密码。
【搜】活动2
揭秘“隐身术”
二、恺撒密码的加密算法
明文c
a~w
A~W
x~z
X~Z
其他
密文b
d~z
D~Z
a~c
A~C
不变
规律
ASCII码+3
ASCII码+3
ASCII码-23
ASCII码-23
不变
公式
'a'<=c[i]<='w'
or
'A'<=c[i]<='W'
'x'<=c[i]<='z'
or
'X'<=c[i]<='Z'
chr(ord(c[i])+3)
chr(ord(c[i])-23)
c[i]
chr(ord(c[i])+3)
b=b+
b=b+
'x'<=c[i]<='z'
or
'X'<=c[i]<='Z'
chr(ord(c[i])-23)
二、恺撒密码的加密算法
def
CaesarCipher():
#“加密”按钮激发函数
c=mingwen.get('0.0','end')[:-1]
#获取mingwen对象的内容(明文)
b=''
miwen.delete('0.0','end')
#清空miwen对象的内容
for
i
in
range(len(c)):
#获取明文内容的每一个字符,并加密
if
'a'<=c[i]<='w'
or
'A'<=c[i]<='W':
#判断a~w或A~W间的字母
b=b+chr(ord(c[i])+3)
#生成密文
elif
'x'<=c[i]<='z'
or
'X'<=c[i]<='Z':
#判断x~z或X~Z间的字母
b=b+chr(ord(c[i])-23)
#生成密文
else:
b=b+c[i]
#字母以外的明文不变
miwen.insert("0.0",b)
#在miwen对象中显示结果
二、恺撒密码的加密算法
恺撒密码的加密算法程序
【悟】恺撒密码的加密算法核心代码
明文c
a~w
A~W
x~z
X~Z
其他
密文b
d~z
D~Z
a~c
A~C
不变
规律
ASCII码+3
ASCII码+3
ASCII码-23
ASCII码-23
不变
公式
'a'<=c[i]<='w'
or
'A'<=c[i]<='W'
'x'<=c[i]<='z'
or
'X'<=c[i]<='Z'
chr(ord(c[i])+3)
chr(ord(c[i])-23)
c[i]
密文b
d~z
D~Z
a~c
A~C
其他
明文c
a~w
A~W
x~z
X~Z
不变
规律
ASCII码-3
ASCII码-3
ASCII码+23
ASCII码+23
不变
公式
'd'<=b[i]<='z'
or
'D'<=b[i]<='Z'
'a'<=b[i]<='c'
or
'A'<=b[i]<='C'
chr(ord(b[i])-3)
chr(ord(b[i])+23)
b[i]
加密
解密是加密的逆运算
三、恺撒密码的解密算法
def
CaesarCipher2():
#“解密”按钮激发函数
c=miwen.get('0.0',
'end')[:-1]
#获取miwen对象的内容(密文)
b=''
mingwen2.delete('0.0',
'end')
#清空mingwen2对象的内容
for
i
in
range(len(c)):
#获取密文内容的每一个字符,并解密
if
'd'<=c[i]<='z'
or
'D'<=c[i]<='Z':
#判断d~z或D~Z间的字母
b=b+chr(ord(c[i])-3)
#生成明文
elif
'a'<=c[i]<='c'
or
'A'<=c[i]<='C':
#判断a~c或A~C间的字母
b=b+chr(ord(c[i])+23)
#生成明文
else:
b=b+c[i]
#字母以外的密文不变
mingwen2.insert('0.0',b)
#在mingwen2对象中显示解密结果
恺撒密码的加密及解密算法程序
三、恺撒密码的解密算法
【悟】恺撒密码的解密算法核心代码
【划重点】本内容学科核心素养之三层架构
学科知识层:数据类型(字符串、字符),字符与ASCII
码,函数ord()与chr(),循环语句,分支语
句,条件(逻辑)表达式
问题解决层:算法(加密与解密都是对字符的替换),测
试
学科思维层:抽象(恺撒密码抽象为字符串的替换操作)
、建模(把明文、密文当作字符串处理,字
符串就是一种模型)
四、小结
五、练习
【思与做】恺撒密码的安全性如何?你能提出一种改进方案吗?
一种可行的改进方案是,建立一个明文字符与密文字符之间的一一映射表,即“密表”,如:
明文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:QWERTYUIOPASDFGHJKLZXCVBNM
加密时,A→Q,B→W,…,解密时Q→A,W→B,…,小写字母对应法则也相同,即a→q,b→w,…。
原先恺撒密码只有一个“密钥”,现在好比有25个“密钥”,这样,保密性能大大提升,破解难度大大增加,另外,这个“密表”也是可以按需要改变的。
你能写出这种改进的恺撒密码的加密与解密算法吗?试一试。
参考程序