数据加密与安全导学案
知识目标:
1、了解数据安全的必要性,区分口令与密码。
2、了解密码、秘钥概念
3、了解常用加密算法(凯撒密码是重点)
4、区分对称与非对称密码体制
课前自学:
1、通常说的无线网络密码;从银行ATM机取款时需要输入的密码;从严格意义上讲,这里的密码应该称为 口令
2、密码通常是指按特定的编码规则,对通信双方的数据信息进行从 明文 到 密文 变换的一种技术方法。就是把用公开的、标准的信息编码表示的信息,通过一种 变换手段将其变为通信双方外其他人所不能读懂的信息编码,这种独特的信息编码算法就是密码
3、密码最早起源于 古希腊,通常是 密码算法 的简称,它由加密算法 和解密算法组成
4、秘钥 是指在密码算法中引进的控制参数,对一个算法采用不同的参数值,其解密结果就不同。加密算法中的控制参数称加密密钥,解密码算法中的控制参数称解密密钥
5、简单加密算法有替代密码 换位密码,简单异或密码,凯撒密码属于:替代密码
替代密码 的基本思想是将明文中的每个位置的字符用其他字符替代
换位密码 将明文中的字符通过一定的规则重新排列
简单异或加密:明文与密钥异或运算,解密则对密文用同一密钥进行异或运算
6、根据加密密钥(通常记为Ke)和解密密钥(通常记为Kd)的关系,密码体制可以分为 对称 密码体制(即 ke=kd) 和 非对称密码体制(即 ke=kd)。 DES属于 对称密码体制 ,RAS 属于 非对称密码体制
课中探究:
(1)、请猜一猜以下三组字符串的原文是什么?(按小组分开猜)
1、RQ VXQGDB 2、SR WYRHEC 3、中传信泄输被露在息
给出解密信息:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
1、解密方法:每个字符在按字母表顺序向左移3位
解密密钥是:-3
2、解密方法:每个字符在按字母表顺序向左移4位
解密密钥是:-4
3、 解密方法:按【2 8 7 1 4 0 5 3 6】位置重排
中 传 信 泄 输 被 露 在 息
0 1 2 3 4 5 6 7 8
解密密钥是:2 8 7 1 4 0 5 3 6
给出解密方法并较对答案:
1、ON SUNDAY (改动过)
2、ON SUNDAY (改动过)
3、信息在传输中被泄露
(二)、初识密码 (以下内容PPT展示)
密码的概念:
明文:
密文:
秘钥:
加密算法与解密算法
第1,2题的算属于 替代密码,又称 凯撒密码 ,第三题属于:换位密码
(三):
1、换位密码法:
1、逆序:l[::-1] 或l[-1::-1]
(
def encrypt(code,key):
s=[]
for i in range(len(key)): #循环key列表的长度
t=key[i] #列表里的值
s.append(
code[t]
) # code中第t个数加入到s中
return s
code="除了奋斗别无选择"
key=[5, 3, 0, 7, 4, 6, 2, 1]
result=encrypt(code,key)
print(result)
#['无', '斗', '除', '择', '别', '选', '奋', '了']
)2、一般换位密码
设计加密密码(以凯撒密码为例)
1、凯撒密码是一种简单的置换密码,通过替代方法来实现加密码。
学生活动:
明文:ON SUNDAY
加密过程:用正常顺序的明文字母表右移3个字母得到密文
密钥:+3 得到密文为
密 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明 X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
d 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
得出:e[i]=chr((ord(c[i])-97+m) %26+97) 与e[i]=chr((ord(c[i])-65+m) %26+65)
(
自定义函数开始
encrpt()
自定义函数结束
输入明文c与移位长度
密文b置初值为空
c是否遍历完成
当前元素c是否是小写
b=
b+chr((t-97+m_length) % 26+97
)
遍历下一个
b=
b+chr((t-65+m_length)% 26+65)
b=b+c
输出密文b
当前元素c是否是
大写
是
是
否
否
是
否
t=ord(char)
)2、流程图填空:
(
def main():
#code=input("请输入加密字符串:")
code="ON SUNDAY"
mlength=int(input("请输入移位长度:"))
result=encrypt(code,mlength)
print(result)
if __name__=='__main__':
main()
) (
def encrypt(code,m_length):
b=""
for char in code: #获取明文内容的每一个字符,并加密
t=ord(char)
if
'a'<=char<='z':
#判断a~z字母
b=
b+chr((t-97+m_length) % 26+97
)
elif 'A'<=char<='Z':
b=
b+chr((t-65+m_length) % 26+65)
else:
b=b+char
#字母以外的明文不变
return b
)代码3、
三:对称与非对称密码体制
1、模型:
1、1
2、简单异或算法:
异或运算,是一种逻辑运算,其数学符号为“ ”。运算时要求把参与运算的数转换为二进制数再进行按位运算。如果两个值不相同,那么异或结果为1。如果两个值相同,那么异或结果为0。异或运算具有如下特点:
0 0=0,0 1=1,1 0=1,1 1=0
01001000 10110001=11111001
11111001 10110001=01001000
例1:已知字符“H“的8位二进制为01001000,密钥A的8位二进制为01000001,则异或结果为:_00001001__换成10进制为_9____
代码如下,请填空,并运行验证
(
#方法2:直接用PYTHON的
”
^
”
#此结果为10进制
c1=
”
H
”
key=
”
A
”
print(ord(c1)^ord(A))
) (
#方法1:原理型
def xor(a,b): #每位异或
return (int(a)+int(b)) %2
code="01001000"
key
=
"01000001"
c=""
for i in range(len(code)):
c+=str(xor(code[i],key[i]))
print(c)
)
综合异或代码:
(
def xor(a,b):
#每位异或
return (int(a)+int(b)) %2
def ten2two(a):
# 10进制转二进制
w=""
while a>0:
w=w+str(a%2)
a//=2
while len(w)<8:
#不足补成8位
w=w+'0'
return w[::-1]
#倒一下
def MXor(w1,w2):
# 字符串异或
w=""
for i in range(len(w1)):
w=w+str(xor(w1[i],w2[i]))
return w
)
代码:
(
if __name__=="__main__":
code="Hello"
key="1011000110110001101100011011000110110001"
w1,s2=[],""
for i in code:
w1.append(ord(i)) #取Ascii
for i in w1:
s2=s2+ten2two(i) #转二进制
c=MXor(s2,key) #异或
print(c)
)
课堂练习:
1、若用简单异或对明文转换的ASCII码的二进制“11001100”进行加密,得到密文为“01000011”,则密钥可能为:B
A、11110000 B、10001111 C、01001100 D、01000011
2、已知明文为code="除了奋斗别无选择",采用换位密码法进行加密,结果为:”别选无择了奋斗除”,请问加密密钥与解密密钥分别为:
4, 6, 5, 7, 1, 2, 3, 0与7,4,5,6,0,2,1,3
(
def encrypt(c):
b=""
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] #字母以外的明文不变
return b
def main():
#code=input("请输入加密字符串:")
code="GOOD STUDENT"
result=encrypt(code)
print(result)
if __name__=='__main__':
main()
)3、已知明文为“Good Student”,采用凯撒密码法进行加密,加密码的过程为:Ci=Ek(Pi)=(Pi+5),则可得密文为:Ltti Xyzijsy
4、自主完成
(
def encrypt(code,m_length):
b=""
for char in code:
#获取明文内容的每一个字符,并加密
t=ord(char)
#取Ascii码
if 'a'<=char<=chr(ord('z')-m_length) or 'A'<=char<=chr(ord('Z')-m_length):
b=b+chr(t+m_length)
elif chr(ord('z')-m_length+1)<=char<='z' or chr(1+ord('Z')-m_length)<=char<='Z' :
b=b+chr(t-(26-m_length))
else:
b=b+char
#字母以外的明文不变
return b
def main():
#code=input("请输入加密字符串:")
code="GOOD STUDENT"
mlength=int(input("请输入移位长度:"))
result=encrypt(
code,mlength
)
print(result)
if __name__=='__main__':
main()
)