APP下载

Python之探秘凯撒密码

2021-09-22何青波

中小学信息技术教育 2021年9期
关键词:学生主体密钥密码

何青波

【摘 要】本案例是以身边事物入手,鼓励学生多观察生活、多思考,介绍了高中信息技术《可以复用的代码》这一节课的案例背景、案例过程及案例反思;介绍了利用自定义函数进行凯撒密码加密的思路与过程。

【关键词】案例;自定义函数;密码;密钥;学生主体

【中图分类号】G434 【文献标识码】A

【论文编号】1671-7384(2021)09-062-03

案例背景

自定义函数虽然在粤教版教材中并未单独拿出一节课来需要讲授,但在学考和很多比赛中,都出现了自定义函数的身影,因此有必要拿出一节课讲授自定义函数,同时回顾之前所学内容。由于凯撒密码对每一次传输的信息都要进行加密,即加密功能这一部分代码是需要重复使用的,故可以通过探究学习自定义函数对凯撒密码加密。

案例描述

1.情景模拟,课堂导入

为充分调动学生学习的积极性,引起学生对编程学习的兴趣,课前我随机找到几个学生,其中不乏性格外向、具有表演能力的学生,也有性格内敛、需要多些表现机会的学生,告诉他们表演的主题为“上课传纸条,纸条信息却被老师截获”,让学生自导自演,进行情景模拟再现。上课伊始,几个学生的精彩出演,有意想不到的效果。此时,我趁机抛出问题让学生思考:如何对纸条信息进行加密,纸条即便被老师发现也不会获取到任何有价值的信息?学生很活跃,很多学生都提到了加密,我顺势引出了最原始的加密方式—— 凯撒密码,同时引出了本堂课的教学主题—— Python之探秘凯撒密码。

2.视频介绍“凯撒密码”

班级里仅有少部分学生听说过凯撒密码,但对它加密的原理一知半解。为让学生充分理解凯撒密码加密的原理,我利用视频介绍凯撒密码的加密原理,并在视频播放前让学生带着如下几个问题观看视频并思考:

(1)什么是明文和密文?

(2)什么是密钥?它的作用是什么?

(3)用自己的语言组织一下凯撒密码加密的原理是怎样的?

学生对于密码加密有着较高的求知欲,学习兴趣浓厚,所以在观看完视频后,每个小组派了一名代表回答问题。加密前的原始信息称为明文,加密后的字母信息称为密文,移位发生的偏移量称为加密算法的密钥。有了密钥,发送方就可以将明文加密成密文发给接收方,接收方知道加密时使用的密钥就可以将密文还原成明文,破译出真正的密码信息。凯撒密码加密的原理是依次对明文中的每个字符依据密钥按照字母表顺序进行一定的偏移,得到对应的密文字符。

3.任务驱动,激发兴趣

任务一:系统内置函数实现凯撒密码加密

“假设密钥为2,将明文‘a加密转换成密文的过程是怎样的呢?让我们一起画出它的示意图。”在Python里面,字符是不能直接与整数进行相加运算的,但计算机中的英文字符编码统一采用的是ASCII编码,所以顺势回顾了Python中可以用来查询字符对应ASCII的内置函数ord()及可以用来查询ASCII对应字符的内置函数chr(),并与学生合力画出了示意图,如图1所示。有了示意图,学生对凯撒密码加密的原理理解得愈发深刻。

图1  凯撒密码加密原理示意图

“假设加密前的明文字符用x表示,加密后的密文字符用y表示,密钥用变量offset来表示。请第一组和第二组的同学利用自然语言来描述凯撒加密算法,第三组和第四组的同学利用流程图来描述凯撒加密算法。”这样,老师与学生一起顺势回顾了算法描述的三种方法。而有了凯撒密码加密的示意图,同学们利用自然语言来描述凯撒加密算法基本都没有什么问题。但用流程图来描述凯撒加密算法时,学生因为刚接触流程图相关图形及符号,容易错用流程图图形。

之后将待全部完成的程序下发给学生,经过刚才算法描述方法的学习,学生基本能够补充完整ord()和chr()函数完善程序。在按F5键运行程序后,有学生提出疑问:“密钥为2时,‘y偏移2位后,程序运行后得到的结果为什么是左花括号?”有其他同学通过翻阅课本上的ASCII表发现,在ASCII表中,字符y往后移动2位后,对应的字符就是左花括号。“如果加密时超过了字符‘z,就需要从‘a重新开始,即‘y偏移2位得到的字符应该是a,我们把这种偏移方式叫做循环偏移。那如何实现循环偏移呢?”找三个同学A、B、C上讲台围成一个圈做一个依次报1-20之间数字的游戏,之后随机说出1-20之间的一个数字,比如17,询问在座的同学们刚才报过17这个数字的是哪个同学,同学们异口同声回答B同学。随机找个学生询问为什么是B同学?学生给出了用17除以总人数求余数的方法。这时同学们恍然大悟,开始思考可以通过给26个小写英文字母重新编下号,使用求余数的方法实现循环偏移。

任务二:自定义函数实现单个字符的加密

“假设加密前的明文字符编号为xid,加密后的密文字符编号为yid,密钥用变量offset来表示。”学生可尝试写出(xid+offset)%26获得对小写字母的循环偏移值即yid的值。再次让学生熟悉了ASCII表,同时回顾了求余思想及求余符号%。此时顺势让学生思考:什么是函数?即完成某个会重复使用的特定功能或操作的程序就被称为函数,而这个函数如果是同学们自己定义的就被称为自定义函数。老师用课件显示自定义函数的格式,对其要点进行讲解,之后让同学们将收到的循环偏移程序改写成带自定义函数的程序。由于时间受限,最终只看了两个学生完成的程序,让其他同学帮助这两个学生找出程序出现的错误,同时再次概括使用自定义函数需要注意的问题:一是应用def来声明自定义函数,函数先声明之后才能被调用;二是应使用缩进来表示函数体内容,函數若有返回值时,使用return语句返回函数的计算结果;三是理解圆括号中可以定义参数,明确函数名及冒号的位置,起函数名称时最好见名知意。

任务三:自定义函数实现对一段文本的加密

“发送方与接收方之间现在拟定如下规则:当对明文字符串进行加密时,若该字符是小写字母就对其进行加密,否则不加密。请同学们思考如何实现对一段文本的加密?”引导学生思考解决问题的方法:

(1)把明文中的字符一个个拿出来进行判断(循环结构for)。

(2)如果该字符是小写字母(选择结构if),就对其进行加密(自定义的加密函数),否则就什么也不做。

(3)字符串的连接操作(+)。

之后让同学们小组合作,上机尝试完善半成品程序并展示。

def encode(x,key):         #單个字符的加密实现

xid = ord(x) - 97

yid = ————

y = chr(97 + yid)

return y

def text(str,key):       #文本的凯撒加密算法实现,key为密钥

result = ''

for i in str:          # i表示明文字符串str中依次获取到的每个字符

if ————:         #如果i是小写字母

i =————

result += i        #字符串的连接操作

return result

print(text('Attack Tomorrow!',2),end="")

让同学们根据完善好的程序思考:

(1)如果偏移量变成5,修改哪个地方?

(2)程序是从哪一句开始执行的?

(3)自定义函数有哪些优点?

通过对这三个问题的思考,学生基本可以自己总结出自定义函数的优点。有的学生提到了模块化;有的学生说当需要修改代码时,只需要修改一次代码。对于正确的回答我给予了肯定,同时给出比较专业的术语“降低代码的冗余度和代码重用”,此时学生更容易理解术语。

4.总结巩固,课堂升华

总结本课所学内容,并用课件呈现,同时展开头脑风暴。“如何看待及更好地对信息进行安全保护?”学生踊跃回答,有提到备份保护的,有提到用更安全加密方式的,学生进一步感受到了安全保护的重要性。

课件呈现——可以复用的代码:

(1)函数的分类:(系统内置函数、自定义函数)

(2)函数的定义:def 函数名(参数):

函数体

return 返回值

(3)函数的调用:函数名(参数)

(4)函数的优点:降低代码的冗余度和代码重用。

案例反思

(1)要引导学生多对身边事物进行留意观察,提出疑问,进而想办法去分析、解决问题,强调理论与实践相结合,这样可以大大激发学生学习知识的兴趣。

(2)在课堂上,要始终坚持学生是学习的主体,教师不仅要教授知识,还要注重对学生思想层面及价值观的引导。比如让学生认识到加密及安全保护的重要性,从而让学生在课堂上真正实现“在学中做、在做中创、在创中乐”。

(3)积极参加游戏和被给予肯定的同学往往在课堂上比往常更活跃些,所以要经常对学生予以鼓励,增强学生的获得感和自信心。

(4)整体来讲,这是综合实战比较成功的一节课,学生不仅对之前学过的内容做了很好的巩固,同时也真正实现了寓教于乐,也反映了学生具备较好的综合素养。但因一节课的时间有限,本堂课只能让学生在半成品作品基础上进行补充完善,学生上机实践时间较短,影响了教学效果。

作者单位:山东济南大学城实验高级中学

猜你喜欢

学生主体密钥密码
探索企业创新密钥
密码里的爱
密码系统中密钥的状态与保护*
密码抗倭立奇功
一种对称密钥的密钥管理方法及系统
基于ECC的智能家居密钥管理机制的实现
浅谈学生主体在高职《经济数学》中教学改革
高校中长跑运动现状分析及对策研究
浅谈高中英语教学中怎样发挥学生的主体作用
立足高考下优化高三英语阅读理解教学有效讲评浅析