当前位置:首页>python>用python做数学案例(40)——北宋军事密码的加密与解密

用python做数学案例(40)——北宋军事密码的加密与解密

  • 2026-10-11 08:21:27
用python做数学案例(40)——北宋军事密码的加密与解密

一、探究缘起

4月23日,我在人北中学聆听了金牛区青教赛参赛老师苟红梅的课《神奇的加密术》。课堂上,老师除了讲解教材里经典的西方凯撒密码,还拓展引入了我国北宋《武经总要》当中的古代军事密码——字验密码,内容新颖有趣,让我感触很深。

当下AI编程十分便捷高效,于是我借助AI,编写了一套北宋字验密码专属加密解密Python代码,整体效果我特别满意。

首先代码注释清晰、结构条理分明,开头两段分别设置两个列表,一个对应40条古代军事军情短语,另一个对应古诗《过故人庄》里的40个汉字。

接着运用Python字典推导式,把军情短语和诗句汉字一一匹配对应。程序里建立了两组双向字典:一组以军情短语为键、诗句汉字为值,用于加密;另一组以诗句汉字为键、军情短语为值,用来解密,分别在加密、解密函数中调用,逻辑严谨清晰。

同时程序交互界面设计得很贴心,采用While True循环结构,可以持续反复运行。每完成一次加密或解密任务后,都会弹出功能选择界面:输入1加密、输入2解密、输入3查看完整军情密码对照表、输入0退出程序。整体操作简单友好,实用性很强。

这次从听课学习,到借助AI自主编程创作的全过程都十分顺畅愉快,特此分享给各位老师。

二、豆包生成python代码

# ====================== 1. 严格匹配史料:40条军情 + 40字密钥诗 ======================# 40条标准军情短语(北宋字验原版)military_phrases = [    "请弓", "请箭", "请料", "请添兵", "请调马",    "请攻贼", "请守险", "请战捷", "请解围", "请赏功",    "请粮料", "请草料", "请车牛", "请船楫", "请甲仗",    "请医药", "请犒赏", "请援兵", "请进军", "请退军",    "请固守", "请出战", "请埋伏", "请纵火", "请放水",    "请诱敌", "请劫寨", "请夜袭", "请昼攻", "请围守",    "未见贼", "贼多", "贼少", "贼进兵", "贼退兵",    "将士叛", "士卒病", "都将病", "战不利", "战大捷"]# 密钥诗:孟浩然《过故人庄》40字(1-40号一一对应)key_poem = [    "故", "人", "具", "鸡", "黍",    "邀", "我", "至", "田", "家",    "绿", "树", "村", "边", "合",    "青", "山", "郭", "外", "斜",    "开", "轩", "面", "场", "圃",    "把", "酒", "话", "桑", "麻",    "待", "到", "重", "阳", "日",    "还", "来", "就", "菊", "花"]# 构建双向映射字典# 加密:军情短语 → 诗中汉字phrase_to_char = {phrase: charfor phrase, char in zip(military_phrases, key_poem)}# 解密:诗中汉字 → 军情短语char_to_phrase = {char: phrase for phrase, char in zip(military_phrases, key_poem)}# ====================== 2. 加密函数:军情明文 → 密码汉字(宋代密文) ======================def encrypt_military(plain_phrase):    """    plain_phrase: 军情明文(必须是40条标准短语之一)    return: 加密后的密文(诗中对应汉字)    """    if plain_phrase in phrase_to_char:        return phrase_to_char[plain_phrase]    else:        return"❌ 错误:该短语不在40条军情密码本中"# ====================== 3. 解密函数:密码汉字 → 还原军情明文 ======================def decrypt_military(cipher_char):    """    cipher_char: 密文(诗中汉字)    return: 解密后的军情明文    """    if cipher_char in char_to_phrase:        return char_to_phrase[cipher_char]    else:        return"❌ 错误:该汉字不在密钥诗中"# ====================== 4. 交互运行界面 ======================if __name__ == "__main__":    print("=" * 50)    print("📜 北宋《武经总要》「字验」军事密码模拟器")    print("密钥诗:孟浩然《过故人庄》40字")    print("加密:军情短语 → 诗中汉字 | 解密:诗中汉字 → 军情短语")    print("=" * 50)    while True:        print("\n请选择功能:")        print("1. 加密(军情明文 → 密码汉字)")        print("2. 解密(密码汉字 → 军情明文)")        print("3. 查看全部40条军情密码本")        print("0. 退出程序")        choice = input("\n输入序号:")        if choice == "1":            plain = input("请输入要加密的军情短语:")            result = encrypt_military(plain)            print(f"✅ 加密结果(密文汉字):{result}")        elif choice == "2":            cipher = input("请输入要解密的密码汉字:")            result = decrypt_military(cipher)            print(f"✅ 解密结果(军情明文):{result}")        elif choice == "3":            print("\n📋 40条军情-汉字对照表:")            for idx, (phrase, char) in enumerate(zip(military_phrases, key_poem), 1):                print(f"{idx:2d}: {phrase:<6} → {char}")        elif choice == "0":            print("程序已退出")            break        else:            print("❌ 输入错误,请选择0-3的序号")

三、运行演示

错误提示

四、听课记录+心得体会

北师大版八年级上册 综合实践《神奇的加密术》

一、基本信息

授课类型:初中数学综合实践课

授课内容:古代军事密码、凯撒密码、密码自主设计

二、课堂教学流程

(一)情境导入:影视片段引入密码

教师播放北宋军事情报被破译的影视片段,以古代军事谍报为切入点,引出本节课研究密码的现实意义。

1. 军事层面:密码是国防情报传递的重要手段;

2. 生活层面:当下AI时代电信诈骗频发,了解密码原理有助于辨别信息、守护个人信息安全。

(二)新知初探:北宋《武经总要》字验密码

1. 知识溯源:讲解北宋曾公亮《武经总要》记载的字验密码。选用孟浩然《过故人庄》作为约定诗,全诗四十个字,字字不重复,按顺序编码1至40,每一个序号对应一条固定军事指令。

2. 课堂任务:

① 破译任务:给出密文“数、长、日”,学生查找文字在诗中的序号,对照密码表翻译军事情报;

② 创作任务:学生自行编写两至三字密文,小组内部互相破译。

3. 深度思考:

① 约定诗要求:必须无重复汉字,保证编码一一对应;

② 数学思想:学生只能粗浅感知对应关系,教师拔高总结为函数一一对应思想,提升课堂数学高度。

(三)探究二:凯撒密码

1. 教学流程:教师展示明文、密文对照表,呈现字母平移加密规则。设置双向任务:学生完成密文破译、明文加密。

2. 思想提炼:教师总结凯撒密码底层数学思想为周期性,字母循环移位、周期往复,通俗易懂、耐人回味。

(四)合作交流:密码对比与加密优化

1. 对比两类密码优缺点:

① 北宋汉字密码:受古诗字数限制,仅有四十条指令,表意范围窄;汉字无通用加密规律、随机性强,破译难度极大、保密性高;

② 凯撒字母密码:依托26个英文字母自由组合,单词句式丰富、表意量大;但是移位规则简单、规律明显,容易被破解。

2. 开放性思考:如何提高密码破译难度?

课堂提到密钥(金字旁“钥”),密钥是加密解密的专属约定条件。增加破译难度常用方法:增设专属密钥、增加移位变量、采用多层加密、选用无重复文本作为编码本、打乱排序规则等。该问题开放性强,为后面自主设计密码做好铺垫。

(五)小组合作:自主设计密码

1. 设计要求:必须运用初中数学知识,如坐标位置、代数式、函数等;可借鉴北宋密码、凯撒密码的设计逻辑。

2. 汇报框架严格规范:包含加密法则、加密信息、解密过程三部分,清晰的模板降低学生创作难度,规范数学逻辑表达。

3. 成果点评:各小组展示完毕,教师精准点评优缺点,规范学生表达。

(六)高阶挑战:函数刻画加密法则

课堂末尾设置拔高任务:利用函数关系式表达凯撒加密规则。因字母循环移位,需要运用简单分段函数完成表达。该环节难度较高,即便八年级学生,函数掌握程度尚且有限,教师讲解细致通透,拓展学生高阶思维。

三、听课感悟与教学反思

1.本课虽是综合实践拓展课,授课教师最终评奖名次一般,但课堂质量极高、创意新颖、让人耳目一新。课程贯通古今,把古代军事文化、现代信息安全、数学抽象思想融为一体,双向加密、逆向破译,思维设计精妙。

2. 结合本校教学现状:我校对于教材综合实践板块通常不上、不深究,书本草草带过,教师缺乏深入研究。学生基础偏弱、思维能力不足,综合实践课耗时久、理解门槛高,课堂性价比偏低。

3. 自我启发:此类综合实践课极具开发价值,例如教材中的万花筒制作、密码探秘,都可以打磨成特色趣味课。今后可以主动研究赛课、打磨特色课,争取多参加优质赛课,提升个人教学水平,丰富个人教学成果。

4.本课程体现了华东师大汪晓勤教授强调的“将中华优秀传统文化融入数学教育”的理念。

—END—

最新文章

随机文章