内容正文:
数据加密与安全
学考要点 数据加密与安全
【必修2 信息系统与社会第110~115页 指导意见第45~49页】
数据加密与安全
(1)数据加密的原因及目标
①原因:大量信息以数据形式存放在信息系统里,并通过公共信道传输,数据面临着被非授权读取、截获、篡改、伪造等一系列安全问题。
②目标:保密性、完整性、不可否认性、存在性。
(2)密码与密钥
①口令:登录系统时需要输入的密码,用于认证用户身份。
②密码:密码通常是指按特定编码规则,对通信双方的数据信息进行从明文到密文变换的一种技术方法。
③密钥:是指在密码算法中引进的控制参数,对一个算法采用不同的参数值,其解密结果就不同。加密算法中的控制参数称加密密钥,解密算法中的控制参数称解密密钥。
④密码系统:包括明文、密文、密钥和密码算法四个方面。
原有的信息称为明文(Plaintext,简称P);明文经过加密变换后的形式
称为密文(Ciphertext,简称C);由明文变为密文的过程称为加密(Enciphering,简称E), 通常由加密算法来实现;由密文还原成明文的过程称为解密(Deciphering,简称D), 通常由解密算法来实现。
常见的加密函数形式: C=EK1(P);常见的解密函数形式: P=DK2(C)。
(3)简单加密算法
①替代加密法:将明文中的每个位置的字符用其他字符替代。
②换位密码法:将明文中的字符位置通过一定的规则重新排列。
③简单异或法:将明文与密钥进行异或运算,解密则是对密文用同一密钥进行异或运算。
(4)对称与非对称密码体制
根据加密密钥(通常记为Ke)和解密密钥(通常记为Kd)的关系,密码体制可以分为两种。若一种加密方法Ke=Kd,则称为对称密码体制或单钥
密码体制。若一种加密方法Ke≠Kd,则称为非对称密码体制或双钥密码体制。
例1 小林统计了一首英文诗中的字母出现频率,把出现频率最高的10个字母组成一套编码,将自己生日中的8个数字转换成对应字符。小林的生日、出现频率最高的10个字母组成的编码及转换后的字符串在密码系统中分别是( )
A.明文、密文、密钥 B.密文、密钥、明文
C.明文、密钥、密文 D.密钥、明文、密文
C
【解析】 小林的生日是明文(原文), 出现频率最高的10个字母组成的编码是密钥(加密使用的字典), 转换后的字符串是密文(加密后的文件),选项C正确。
变式 为了数据安全,采用异或法进行加密。用二进制编码为“00101100”的密钥K 对明文进行简单异或加密,得到密文C 的二进制编码是“01010101”,则明文对应的二进制编码是( )
A.00101001 B.01111001 C.01000100 D.00111000
【解析】 明文可以通过密文和密钥的异或运算得到,异或原则:相同为0,不同为1。运算如下,选项B正确。
B
例2 有如下Python程序段:
p=”Tel-114”
c=” ”
for ch in p:
if ch>=”0” and ch<=”9”:
c+=str(9-int(ch))
elif ch>=”a” and ch<=”z”:
c+=chr(ord(ch)-ord(”a”)+ord(”A”))
else:
c+=ch
print(c)
执行该程序段后,输出的结果是( )
A.tEL-885 B.tEL-114
C.TEL-114 D.TEL-885
D
【解析】 该Python程序段的功能为:若ch为数字字符,则加密后字符的数值和原数字字符的数值相加和为9;若ch为小写字母,则加密后的字符为原小写字母对应的大写字母;若ch为除数字字符和小写字母外的其他字符,则原ch保持不变。结合需加密字符串为p=”Tel-114”,那么按加密规则,程序运行后得到的输出结果为”TEL-885”。选项D正确。
变式 某字符串加密算法的Python程序段如下:
s=”TXAB1234”;ans=””
i=j=0
n=len(s)
for t in s[0:n//2]:
j=int(s[n-i-1])
ans=chr((ord(t)+j-65)%26+65)+ans #字符“A”的ASCII 码值为65
i+=1
print(ans)
执行该程序段后,输出的结果是( )
A.XACC B.UZDF C.CCAX D.FDZU
【解析】 “chr((ord(t)+j-65)%26+65)”的作用是先将大写字母转换为[0,25]范围内的整数,再向后移动t 位,最后转换为对应大写字母,如T 在大写字母表上后移4 位为X,X 后移3 位为A,以此类推,选项C正确。
C
例3 (2024·镇海中学学考模拟)小明编写了一个字符串加密程序,功能如下:输入明文,显示加密后的密文。加密算法如下:
①若是大写字母,则进行字母替换:英文26个字母按键盘QWERT的顺序排列,从第一行到第三行连接起来再与字母表顺序进行替换,如Q用A来替换,Y用F替换,如下表所示:
②将经过字母替换后的明文每个字符的8位二进制ASCII码(不足8位的左端补0,补足8位)分成两段(左4位一段,右4位为另一段),如字符“A”的8位二进制ASCII码值为01000001,分段后为0100,0001;
③将高位段(左边4位)转换为十六进制数(如0100转化为4);
④将低位段(右边4位)取反(0→1,1→0)后再转换为十六进制数(如0001→1110→14→E);
⑤依次连接两位十六进制数,得到该字符的密文,如“Q”的密文为“4E”;
⑥将每个字符的密文按照明文的顺序依次连接。
程序运行界面如图所示:
请回答下列问题。
(1)按照上述加密算法,字符“E”的密文是______。
(2)实现上述功能的Python程序如下,请在横线处填入合适的代码。
def dtb(num): #十进制转8位二进制,高低4位分别处理
i=0;result=””
while i<8:
if i<4:
y=1-num%2
4C
else:
y=num%2
num=num//2
result=str(y)+result
i+=1
return result
mw=input(”请输入待加密的字符: ”)
jm=””
mm={”Q”:”A”,”W”:”B”,”E”:”C”,”R”:”D”,”T”:”E”,”Y”:”F”,”U”:”G”,”I”:”H”,”O”:”I”,”P”:”J”,”A”:”K”,”S”:”L”,”D”:”M”,”F”:”N”,”G”:”O”,”H”:”P”,”J”:”Q”,”K”:”R”,”L”:”S”,”Z”:”T”,”X”:”U”,”C”:”V”,”V”:”W”,”B”:”X”,”N”:”Y”,”M”:”Z”}
for i in range(len(mw)):
if ”A”<=mw[i]<=”Z”:
①___________________
jm+=mm[mw[i]]
else:
jm+=mw[i]
jm1=””
for i in range(len(jm)):
②________________________
zf=”0123456789ABCDEF”;result1=””;sum=0
for i in ③________________________________________________
__________________________________________________:
jm1+=dtb(ord(jm[i]))
range(0,len(jm1),4)或range(0,len(jm1)-1,4)或
range(0,len(jm1)-2,4)或range(0,len(jm1)-3,4)
sum=int(jm1[i])*8+int(jm1[i+1])*4+int(jm1[i+2])*2+int(jm1[i+3])
result1+=zf[sum]
sum=0
print(”密文为: ”,result1)
【解析】 (1)将E替换为C,并将字符C的ASCII码转换成二进制为01000011,将高4位转换成十六进制数为4;将低4位取反得到1100,再转换成十六进制数为C,依次连接为加密结果。
(2)①在字典中查找替换字符。
②调用函数进行进制转换,将十进制转换成二进制,函数中将低位段4
位进行取反。
③以4位一组转换成十进制数,所以步长为4。
$$