师:同学们,今天上课的内容是必修一、第三单元第四节加密与解密的第二课时。上节课我们分析了生活中由密码引起的数据安全问题,理解了对数据进行保护的意义,还体验了用Python实现简单求取算法。本节课的教学目标是理解数据加密与解密的概念及原理,了解数据加密的历史,并会用Python实现简单的加密算法。

  自古以来,在管理国家、指挥战斗或是经济来往中,都需要高效安全的数据通讯系统。中国是世界上使用密码通讯最早的国家之一。据古代兵书《六韬》所载,3000年前姜子牙用“阴符”来表示不同的指令消息,进行军事保密通信。

  所谓的“阴符”保密法,就是事先制作一些长度不同的竹片,然后约定好每个长度的竹片代表的内容,比如三寸表示溃败,四寸表示将领阵亡,五寸表示请求增援,六寸表示坚守,一尺表示全歼敌军等等。这种“阴符”无文字、无图案,只有前方少数将领和后方指挥人员了解含义,即使传令兵被俘获或叛变,敌人也搞不懂几张长短不一的竹片到底代表了什么。

  虽说“阴符”的保密效果不错,但是能传达的信息有限,要是战场上有超乎事先意料的情况,“阴符”也就表达不了。为了弥补这一缺点,就出现了另一种保密法——“阴书”,它是“阴符”的补充。比如我要给你写封信,又怕被其他人看到,于是把书信拆为三部分,派三个人送给你。如果其他人要截取这个信息,除非把我派出的三个人全部找到,只有三部分合在一起才能读懂信的内容,若漏掉一个,那获取的信息就不完整了。

  “同余”是一种方法上的加密,可以看作是较为典型的秘密分享方案原型。但无论是“同余”还是“阴符”都有着一定的局限性,一是有可能被对方截获而难以达到传递消息的目的;二是有可能被对方破译内容,并被对方将计就计加以利用。于是人们开始研究更为安全的加密方法。北宋进士曾公亮提出了“代码法”。

  主将与某偏将约定,以杜甫的《春望》一诗为“字验”,诗云:“国破山河在,城春草木深。感时花溅泪,恨别鸟惊心。烽火连三月,家书抵万金。白头搔更短,浑欲不胜簪。”这首诗中的40个字,每个字都代表一项军情,共四十种军情。偏将若要将第28项和第40项军情“战获小胜,敌方仍在固守”报告给主将,只需在一封普通的书信中设法写进“抵”字和“簪”字,并在其旁边加一个小黑点。主将一看,“抵”“簪”二字是诗中的第28与第40字,就明白了前方的军情是第28和第40项的含义。同样,主将在回信中设法写进“春”字和“泪”字,并在其旁边加一个小点,偏将就从该诗中第7和第15个字的位置得到了“给你增派马匹,立即移营”的指令。

  这种方法非常巧妙,已具有现代密码的雏形。由于信件无关机密,即使送信人叛变或者被俘,也不能从中读出有用的信息,保密的目的就达到了。讲完中国古代的加密发展史,我们来看看古代西方密码的代表——凯撒密码。古罗马时期,凯撒曾经使用密码来传递信息,这个传递过程是怎样的呢?假设A和B之间发送信息,而C一直在窃听,于是A和B约定好对信息进行加密,A、B之间的约定称为密钥。A发送的原始信息称为明文,加密后的信息称为密文。加密就是将原始信息隐匿起来,使之在缺少特殊信息时不可读。B收到信息后,根据约定的方法解密,就能得到原始信息,将密文还原为明文的过程称为解密,这就是加密和解密的概念。

  凯撒密码是如何进行加密和解密的呢?我们一起来做个小游戏,明文是“happy”,密文是“kdssb”。大家有没有发现其中的秘密?是不是有同学已经猜出来了?没错,就是这样,我们可以看到这个加密方式,就是将每个明文字母向后移动3位就得到了密文。比如明文“h”向后移动3位,“i,j,k”,得到密文“k”;明文“a”往后移动3位,“b,c,d”,得到密文“d”。但“y”不行,“y”后移3位就超出密码表怎么办呢?虽然无法向后移位,但是可以回到字母表表头,按顺序后移。所以“y”的移位方式是“y,z,a,b”,“y”的密文是“b”。于是我们知道了凯撒密码加密的原理:将明文的每一个字母用字母表中该字母后的第三个字母代替。若明文字母在“A”和“W”之间,则直接向后移3位,得到对应的密文字母;否则,如果明文字母在“X”和“Z”之间,则返回字母表的开头,按顺序后移。特别注意“X”“Y”“Z”的移位方法。

  字符“A”和“Y”的密文是什么呢?我们通过流程图进行分析,开始输入明文“c”,将密文“b”置为初值为空,判断“c”是否介于“A”到“W”之间。如果是,明文“c”在字母表往后移动3位;如果不是,则意味着后移3位会超出密码表,则需要返回字母表头,按顺序后移。所以字符“A”介于“A”到“W”之间,后移三位得到“B,C,D”,密文为“D”;明文字符“Y”不介于“A”到“W”之间,后移操作会超出字母表,所以返回“Z,A,B”,密文为“B”。

  大家答对了吗?这是加密算法设计的流程图,但没有体现位移的具体操作。请问同学们如何将移位的结果用表达式表达出来呢?在之前的课程学习过,字符在计算机中是用ASCII码表示,明文向后移3位,并不是字符加3,所以是ASCII码加3。“A”至“W”的加密方式是ASCII码加3,但“X”到“Z”ASCII码加3会超过字母表,所以要减去字母表的总数26,让它返回到字母表表头,加3 - 26实际上就是减23。我们用逻辑表达式将判断的条件表示出来,如果满足条件就进行移位操作。具体需要两个函数,“ord”函数返回对应字母的ASCII码,“chr”函数返回该ASCII码对应的字符。我们看看这两个函数具体的使用方法。

  “ord”返回“A”的ASCII码为65,将ASCII码加3,也就是“ord(‘A’) + 3”,得到移位后的ASCII值为68。用“chr”函数返回ASCII为68的字符,结果为“D”,因为68由“ord(‘A’) + 3”计算得来,所以在“chr”函数中写上“ord(‘A’) + 3”,这就是移位的具体实现过程。根据刚才讲述的过程,我们对字符“A”和“Y”进行移位操作,用变量“c”存储明文字符“A”,移位为表达式“chr(ord(c) + 3)”。明文字符“Y”用“ord”函数转为ASCII码值为89,89 - 23 = 66,对应字符“B”,所以“Y”移位后得到的表达式是“chr(ord(c) - 23)”。我们将结果填入上面的分析表中。当明文在“A”到“W”之间,移位后的式子是“chr(ord(c) + 3)”;当明文在“X”与“Z”之间,移位后的密码式子是“chr(ord(c) - 23)”。同时把移位的操作用具体表达式补充到单个大写字母进行加密的流程图中。

>> 点击阅读全文
《信息技术 必修1 3.4加密与解密(第二课时) 逐字稿-4,670字 第5版》.docx
将本文下载保存,方便收藏和打印
导出文档