密码学与网络安全(第五版)答案精讲:仿射密码、Hill密码与RSA计算

发布时间:2026/10/17 20:28:55
密码学与网络安全(第五版)答案精讲:仿射密码、Hill密码与RSA计算
简介《密码编码学与网络安全第五版》配套习题答案文档面向高校信息安全专业学生、备考者及自学者用于对照教材各章练习、检验解题思路并巩固密码学与网络安全的核心概念。文档按教材章节完整组织涵盖第1章至第20章内容包括引言与OSI安全架构、经典加密技术、DES与AES、有限域理论、数论基础、公钥密码学与RSA、密钥管理与其他公钥体制、消息认证与散列函数、数字签名与认证协议、邮件安全、IP安全、Web安全、入侵者与恶意软件、防火墙等主题答案以英文呈现基本对应教材每章末尾的习题要求可帮助解决课后题无从下手的困扰也为期末复习和考研准备提供有价值的参考。资源包仅有1个doc文件约231KB便于直接阅读或打印。已有61人学习下载适合正在学习或复习该教材的读者参考。1. 这份答案不是“抄作业手册”它替你省掉的是来回翻书的时间期末备考或者考研复试遇到《密码编码学与网络安全》的读者十有八九会卡在同一件事上题目做完了不知道对不对。特别是仿射密码的互素条件、Hill密码的矩阵求逆、RSA的模逆元计算这类需要多步推导的题错一步后面全乱翻教材的附录又找不到完整的推导过程。这份《密码编码学与网络安全第五版答案》文档把全书20章的问答题与计算题解答按章节拆开从第2章古典加密技术的替换密码、置换密码到第9章公钥密码体制的RSA计算再到第20章防火墙的概念问答覆盖了概念题和计算题两类题型。适合三类人正在备考的学生、自学入门的信息安全工程师、需要快速核对密码学计算结果的开发者。它不是给你直接抄的作业而是校准你推导路径的参照系。2. 全书20章怎么分布从替换密码到防火墙的完整解题链路2.1 章节脉络与题型特征哪些章节偏概念、哪些章节偏计算拿到这份答案文档先别急着翻题目。它的目录按原书章节排列20章的内容实际上可以分成三大块。第1到第2章是安全体系结构与古典加密技术对应OSI安全架构、替换密码、置换密码和隐写术问答题和计算题各占一半。第3到第10章是全书计算量最密集的部分DES与AES的轮函数、有限域上的加法乘法、RSA密钥生成与加解密、密钥管理与公钥密码系统这些章节的答案里几乎全是数学推导步骤。第11到第20章回到概念为主消息认证、哈希函数、数字签名、邮件安全、IPSec、Web安全、入侵检测、恶意软件、防火墙大部分是Answers to Questions的文本解答少量涉及模式计算。从答案的具体内容看文档的编排方式是「问答题先列要点、计算题写完整推导」。比如第1章的Answers to Questions直接给出OSI安全架构中安全攻击、机制与服务三类定义的英文原文摘要第9章的RSA计算题则是按选素数、算n与φ(n)、选e、求d、加解密验证的流程逐步展开。这种结构适合当核对工具用不适合当教材从头读到尾。章节组别与题型分布对应关系如下表章节范围核心内容题型特征答案形式第1-2章OSI安全架构、古典加密、隐写术概念描述与手工计算并重问答题定义摘要、计算题逐步推导第3-4章DES、有限域基础计算为主含S盒与域运算轮函数过程、域上的乘法表计算第5-6章AES、对称密码工作模式计算为主含字节代换与模式选择状态矩阵变换步骤、模式对比说明第7-8章对称加密应用、数论基础概念与初等数论计算混合应用场景分析、gcd与模逆计算第9-10章RSA、密钥管理与其他公钥体制计算密集RSA是重头密钥生成全流程、加解密数值验证第11-13章消息认证、哈希、MAC、数字签名概念主导认证协议流程描述第14-17章认证应用、邮件安全、IPSec、Web安全概念主导协议机制与安全目标分析第18-20章入侵者、恶意软件、防火墙概念主导防御机制分类说明2.2 答案的组织方式Questions与Problems双轨定位怎么配合原书这份答案文档把每章的题目分成两套Answers to Questions和Answers to Problems。前者对应原书每章末尾的思考题后者对应计算题和应用题。两套答案的编号规则不同问答题按章节内顺序编号计算题也是独立编号两者可能同时出现“1.1”“2.1”这样的编号初看容易混淆。我一般建议先做计算题因为计算题有确定结果能直接对照答案判断对错问答题放在后面用答案核对自己的表述是否覆盖了得分点。使用时有一个很实际的定位技巧答案里每道题都写了完整的原题描述前几个词。比如第2章计算题2.5的答案开头是“The first letter t corresponds to A”对应题干里那句需要利用关键词构造字母表的题目。把题目开头几个词记下来用文档的查找功能搜一下就能快速定位到对应的解答不需要一页页翻。原书每章末尾的习题编号与这份答案的所处位置并不完全一致因为答案文档把问答题和计算题分开了而原书是混排的。做题时先确认自己在做的是哪一类题再去匹配相应区段能省下不少时间。2.3 从答案反推教材重点高频考点在习题中的分布把这份答案的篇幅分布扫一遍能看出原书的出题偏好。第2章的古典加密占了整整9页答案仿射密码、Playfair、Hill密码各有多道变体题说明这一章是计算题大户。第3章DES的答案重点集中在密钥调度与轮函数结构跟S盒相关的题目反复出现。第9章的RSA从密钥生成到加解密验证用了大量数值算例引导读者手工完成计算。有意思的是第4章有限域的答案篇幅不大但内容密度很高答案里直接把GF(2^8)上的乘法化简过程写出来了这在教材正文里反而没给得这么细。第11章之后的答案基本是文本描述篇幅减少但信息量不低比如第16章IPSec的答案列出了安全联盟、认证头、封装安全负载三者的关系这类文字经常出现在考研复试的问答环节。从做题策略看如果复习时间有限优先把第2章、第3章、第5章、第9章的计算题过一遍这几章的答案最能检验公式与流程的掌握程度。概念题集中在后面几章答案文本适合用作背诵提纲但不适合作为唯一复习材料。3. 把答案变成“计算核对器”仿射密码、Hill密码与RSA三类题的核对方法3.1 仿射密码的互素条件答案第一行就纠正你的常见误用第2章计算题2.1的答案开头第一句话是“The values of a and 26 must have no common positive integer factor other than 1.”这句话直接指向仿射密码最容易被忽略的前提条件。仿射加密公式E(a, p) (a p b) mod 26其中a的取值不是随便选的a必须与字母表长度26互素否则加密映射就不是单射两个不同的明文字母会映射到同一个密文字母解密时无法还原。为什么必须互素答案里给出了证明思路如果E(a, p) E(a, q)且p、q都在0到25之间那么a(p - q)必须能被26整除。若a与26互素a不可能提供因子而p - q的绝对值小于26也不可能整除26除非p q。反过来如果a和26有公因子k 1取q p 26/k就能让两个不同的明文字母产生相同密文映射失效。实际做题时最常见的错误是直接取a 2、4、6这类偶数或者取13这些值都与26不互素会导致加密后部分字母无法解密。第2章计算题2.2的答案里列了所有合法a值1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25共12个b有0到25共26种取值总密钥数是12乘以26等于312。这个结论在考试中经常作为填空或选择题出现可以直接用代码验证import math # 检查所有 a 值是否与 26 互素 valid_a [a for a in range(1, 26) if math.gcd(a, 26) 1] print(合法 a 值:, valid_a) print(合法 a 的数量:, len(valid_a)) # 总密钥数 a 的合法取值数 * b 的取值数 total_keys len(valid_a) * 26 print(仿射密码总密钥数:, total_keys)这段代码先枚举1到25之间的所有a值用math.gcd判断与26的最大公约数是否为1然后统计合法数量并乘以b的取值数。math.gcd是Python标准库函数返回两个整数的最大公约数结果为1说明互素。b的取值从0到25共26个不需要额外判断条件因为b对加密的单射性没有影响。得到的结果12乘以26等于312与答案中的数值完全一致。3.2 Hill密码的矩阵求逆答案省略的推导步骤怎么补Hill密码是第2章计算题里最容易在矩阵求逆环节翻车的地方。答案计算题2.15给了一个完整的解密例子加密矩阵是[[9,4],[5,7]]行列式等于9乘7减4乘5等于43。答案里直接写了“43的逆是23 mod 26”然后给出逆矩阵参与解密。很多读者看到这一步会疑惑43的逆为什么是23这里需要回忆模逆的定义所谓模逆是指存在一个整数x使得43x ≡ 1 mod 26。验证一下43乘23等于989989除以26的余数是1所以23确实是43在模26意义下的逆元。但这里有一个坑43本身就是大于26的数做题时先要把行列式对26取模43 mod 26等于17然后求17在模26下的逆。因为17也是23所以答案直接写“43的逆是23”这个写法省略了取模步骤新手容易误解成“直接求43关于26的逆”而不先对26取模结果到最后一步发现数值对不上。用Python可以把整条求逆链路跑一遍def mod_inv(a, m): 在模 m 下求 a 的逆元m 较小时用穷举即可 a a % m for x in range(1, m): if (a * x) % m 1: return x return None K [[9, 4], [5, 7]] det K[0][0] * K[1][1] - K[0][1] * K[1][0] print(行列式 det:, det) print(det mod 26:, det % 26) det_inv mod_inv(det, 26) print(det 在 Z26 下的逆:, det_inv) # 按伴随矩阵公式求逆矩阵 adj [[K[1][1], -K[0][1]], [-K[1][0], K[0][0]]] K_inv [[(det_inv * adj[i][j]) % 26 for j in range(2)] for i in range(2)] print(逆矩阵:, K_inv)这段代码先用穷举法在模26下求17的逆元得到23然后按伴随矩阵除以行列式的方式构造逆矩阵。注意在模运算中除法全部转换成乘法逆元所以逆矩阵的每个元素都要先乘det_inv再对26取模。Python整数取模对负数也能正确处理比如-4 % 26结果是22这正好符合Z26上的计算结果。矩阵求逆这一步做完之后把密文按两个字符一组转换成数字向量与逆矩阵相乘取模就能还原明文。Hill密码的题目在考试中通常给2乘2矩阵因为3乘3矩阵手工计算量太大。做题前先检查行列式与26是否互素不互素则矩阵不可逆题目大概率设置有误或需要调整。这个检查同样可以用mod_inv函数判断逆元存在即可逆。3.3 RSA计算欧拉函数与模逆元的核对路径第9章的RSA题目几乎每道都绕不开三个数值n p乘q、φ(n) (p-1)乘(q-1)、e在模φ(n)下的逆d。答案里会完整给出选素数、算n、算φ(n)、选e、求d、加密、解密的全部步骤但实际做题时最容易错的是把φ(n)记成n p乘q就直接用漏掉减一。另一种常见错误是选e时没有确认e与φ(n)互素导致后面求不出d。我自己核对RSA题的习惯是把答案里的参数抽出来用一段小脚本验证加解密往返是否成立。只要明文、加密结果、解密结果能对得上基本可以确认步骤没错def rsa_check(p, q, e, msg): 验证 RSA 密钥参数与加解密往返 n p * q phi (p - 1) * (q - 1) # Python 3.8 的 pow 支持模逆pow(e, -1, phi) d pow(e, -1, phi) print(n , n, phi(n) , phi, e , e, d , d) c pow(msg, e, n) m pow(c, d, n) print(加密结果 c , c) print(解密结果 m , m) print(加解密一致:, msg m) # 示例参数p17, q19, e5消息取 88 rsa_check(17, 19, 5, 88)这段代码中pow(e, -1, phi)是Python 3.8引入的模逆运算直接返回e在模φ(n)下的乘法逆元。pow(msg, e, n)执行模幂运算效率比先算幂再取模高得多。加密用公钥(e, n)解密用私钥(d, n)如果最终解密结果与原始消息相等说明密钥参数选取正确。做题时如果答案里的d和手算不一致先检查φ(n)是否算错再检查e与φ(n)是否互素这两处是RSA计算的高频错误点。4. 自测闭环设计怎么用这份答案从“看懂”变成“算对”4.1 错题定位三步法先盖住答案再对照步骤只用答案做核对效率其实不高原因是你会不自觉地跳过思考直接看步骤。我常用的做法是「三步定位」第一步盖住答案里计算题的完整推导只保留题目描述自己独立算一遍把每一步结果写在草稿纸上。第二步把答案的步骤逐行和自己的过程对齐标记第一个出现差异的位置。第三步回到原书对应小节重读相关公式确认自己到底是公式记错了还是计算过程的问题只在原书里找答案不急着看下一行解答。这个方法对第2章的仿射密码、第3章的DES密钥调度、第9章的RSA特别有效因为这些题目全是多步计算任何一个中间数值出错都会导致最终结果不一致。答案文档给出的数值推导路径是判断依据但做题时不要一上来就翻答案先完整走一遍流程再逐行比对效果会更好。4.2 用答案构建“薄弱点清单”把计算错误分类管理刷完几章之后把做错的题目按错误类型分类比单纯记录错题编号有用得多。我按经验分成四类密钥空间与参数取值范围错误典型的比如仿射密码把a取成偶数、RSA里e与φ(n)不互素模运算错误包括负数取模忘加模数、模逆元求错矩阵与域运算错误比如Hill密码行列式不互素还在继续求逆、有限域乘法表查错流程顺序错误比如RSA先选e再算φ(n)导致后续全乱。分类统计之后能明显看出自己的薄弱项集中在哪类。错得最多的那类就是复习时需要重点补的。例如发现模运算错误频发就把第4章有限域和第8章数论的习题重点过一遍。这份答案的价值不在于告诉你题目结果而在于它的推导步骤能帮你准确判断错误发生在哪个环节。4.3 时间紧张的备考生优先核对哪几章的题目如果只剩几天复习时间我的优先顺序是第2章古典加密计算题全部做一遍核对一遍第9章RSA至少做3道完整计算题第5章AES重点核对字节代换和列混合的状态矩阵变化第3章有余力再看DES轮函数。第11章之后的章节基本是概念问答把答案当背诵提纲用不需要花时间做计算核对。原因在于前几章的计算题在考试中出现频率高而且每题考察的知识点密集。第2章的Playfair矩阵构造、Hill矩阵求逆、维吉尼亚密码的密钥重复使用都是问答和计算都能出题的重点。第9章的RSA则是考研复试笔试的常见大题这类题目步骤固定核对起来也最直观。5. 避坑与常见问题下载这份答案前你要知道的五件事5.1 版本混用第五版与前几版的章节编号差异现象拿着这份答案对第四版的教材发现第5章的题目编号对不上有些题在第四版第4章出现过但答案里标的是第5章。原因第五版对章节顺序做了调整有限域章节的位置、AES与DES的编排顺序都有变动习题编号跟着章节走自然对不上。解决先确认自己用的是第五版教材核对原书目录和这份答案的Chapter标题是否一致。如果手里是旧版教材建议按图索骥用答案里的题目开头关键词搜索而不是直接按题号找答案。5.2 doc格式打开乱码与公式显示不全现象用旧版办公软件打开文档时部分公式变成了方框或乱码尤其是有限域乘法表和矩阵运算部分数字显示错位。原因doc格式的公式依赖特定字体渲染字体缺失时字形替换导致显示异常。解决用支持完整公式渲染的办公软件打开或者将文档另存为pdf再查看。注意转换时不要丢失书签和章节定位结构转换成pdf后建议用带目录面板的阅读器打开方便按章节跳转。5.3 原书答案并非零瑕疵个别推导省略了关键步骤现象照着2.7的答案做双转置矩阵解密怎么排都对不上明文。原因答案里把两个记忆词的矩阵过程压缩成一句“The two matrices are used in reverse order”没有逐格展示第二次转置的展开过程排版上也存在列错位的可能。解决遇到这类题目不要死磕答案的排版用代码实现矩阵转置与列置换来验证。我重新实现后得到的结果与答案一致但纯手工对着PDF做确实容易错位。5.4 只看答案不做题最隐蔽的复习陷阱现象有段时间对着答案一章一章读觉得自己全懂了合上文档做原书复习题连第2章的仿射密码都卡在求逆上。原因阅读解答时大脑会产生“这我也会”的错觉实际动手时公式变换和数值计算都在另一个难度层级。解决把这份答案当成「核对工具」而不是「阅读材料」每章先做题再对照。计算题尤其要这样概念问答可以读但计算题必须动手写一遍。5.5 习题与正文术语不一致英文缩写与中文译名的对照问题现象答案里写的是“Data Encryption Standard”教材中文版译作“数据加密标准”但部分读者不知道这是同一个东西。类似还有“Advanced Encryption Standard”对应“高级加密标准”“Hash”对应“散列函数”或“哈希函数”“MAC”对应“消息认证码”。原因原教材是英文教材答案保留了英文术语中文译本在不同章节采用了不同的译法。解决做题时遇到看不懂的术语先查原书页边的中英对照表不要凭记忆猜测。特别是非对称加密和消息认证码这两块英文缩写在中英文教材间经常引起误解。6. 进阶用法把答案文档抽成你的“个人密码学计算模板库”刷完一遍答案之后真正有价值的事情是把每类计算题的步骤固化成可复用的脚本模板。以第2章仿射密码、第3章DES与第9章RSA为例每类题目的步骤可以抽象成一组固定公式仿射密码的合法a值列举与总密钥数、Hill密码的Z26矩阵求逆、RSA的密钥生成与加解密验证。把这些公式沉淀成脚本以后再遇到同类型题目直接替换参数就能完成核对# crypto_templates.py —— 三大计算题模板 def affine_total_keys(): import math valid_a [a for a in range(1, 26) if math.gcd(a, 26) 1] return len(valid_a) * 26 def hill_inverse_check(K, mod26): det K[0][0] * K[1][1] - K[0][1] * K[1][0] det_inv next((x for x in range(1, mod) if (det * x) % mod 1), None) if det_inv is None: return None # 行列式与模数不互素矩阵不可逆 adj [[K[1][1], -K[0][1]], [-K[1][0], K[0][0]]] return [[(det_inv * adj[i][j]) % mod for j in range(2)] for i in range(2)] def rsa_roundtrip(p, q, e, msg): n p * q d pow(e, -1, (p - 1) * (q - 1)) return pow(msg, e, n), pow(pow(msg, e, n), d, n) print(仿射密钥总数:, affine_total_keys()) print(Hill 逆矩阵:, hill_inverse_check([[9, 4], [5, 7]])) print(RSA 往返:, rsa_roundtrip(17, 19, 5, 88))这三个函数分别对应古典加密、矩阵加密与公钥加密三类题目的核验需求。使用方式是输入题目给出的参数输出与答案比对重点不在运行结果而在生成结果前强制自己确认每个参数的含义与前提条件。a的取值范围、矩阵行列式的互素性、e与φ(n)的互素性这些检查项才是考试真正考察的点。那次在一家公司的笔试里碰到Hill密码的Z26矩阵求逆时间紧、草稿纸不够我在伴随矩阵的符号上卡了快十分钟最后还是用模运算的性质推出来的。从那以后我每次刷完一章都会做一次这类“计算模板化”的整理。这份答案文档就像一副参照系照着推导一遍再写成自己的代码比反复翻书更让人放心。希望帮到你。本文还有配套的精品资源点击获取