第二周预习报告
学习内容
- Head First C 嗨翻 C 语言 第8章
- 《Windows C/C++加密解密实战》第3,5章
- 第三章重点 3.4,3.5, 特别3.4.4
- 第五章重点 5.3.7
- 课程 mindmap
AI 对学习内容的总结(1分)
要求
- 让AI阅读学习内容并进行总结
总结
1. Head First C 嗨翻 C 语言 第8章
- 函数指针:学习如何声明和使用函数指针,这是C语言中一个强大的特性,允许将函数作为参数传递给其他函数。
- 返回函数指针:了解如何从函数中返回函数指针,这在创建回调函数时非常有用。
- 动态内存分配:深入探讨如何在堆上分配和释放内存,这是管理大型数据结构和复杂程序中资源的关键。
- 指针和数组:进一步理解指针和数组之间的关系,以及如何通过指针操作数组。
- 指针的指针:学习如何使用指向指针的指针,这在处理多维数组和复杂的数据结构时非常有用。
- 结构体和联合:介绍如何定义和使用结构体和联合,这些是C语言中创建复杂数据类型的方式。
- 递归函数:探讨如何编写递归函数,这是一种通过函数自身调用来解决问题的方法。
- 错误处理:学习如何在函数中进行错误检查和处理,以确保程序的健壮性。
- 标准库函数:介绍一些常用的标准库函数,如
malloc
、free
、memcpy
等,这些函数在C语言编程中非常重要。- 函数的高级用法:可能还会包括一些函数的高级用法,如变长参数列表的使用。
2. 《Windows C/C++加密解密实战》3.4.4
1. SM4算法概述
- 定义:SM4是一种分组密码算法,适用于安全通信。
- 特点:易于在软件和硬件上实现,运算速度快。
- 结构:采用非平衡Feistel结构,明文和密钥长度均为128比特。
- 迭代:加密和解密算法都采用32轮非线性迭代结构,解密时轮密钥使用顺序与加密相反。
2. 密钥
- 长度:密钥长度为128比特(16字节)。
- 轮密钥:由加密密钥通过密钥扩展算法生成,共32个轮密钥。
3. 密钥扩展算法
- 过程:从128位加密密钥生成32个32位的轮密钥。
- 参数:使用系统参数FK和固定参数CK,这些参数在密钥扩展中使用。
4. 轮函数
- 组成:轮函数F由非线性变换τ和线性变换L复合而成。
- 非线性变换τ:由4个S盒并行组成。
- 线性变换L:包括异或运算和循环左移。
5. 加密算法
- 过程:包括32次迭代运算和一次反序变换。
- 输入:128位明文。
- 输出:128位密文。
6. 解密算法
- 过程:与加密算法结构相同,但轮密钥使用顺序相反
7. SM4算法的实现
- 示例:提供了16字节数据的SM4加解密函数实现。
- 扩展:介绍了如何支持任意长度数据的加解密,包括ECB、CBC、CFB和OFB四种工作模式。
8. 检测函数
- 自检:使用标准数据进行自检,确保算法实现正确。
9. 短块加密
- 问题:讨论了如何处理非16字节倍数的数据,即短块加密问题。
总结
通过本节的学习,可以了解到SM4算法的基本原理、实现方法以及如何在C/C++中进行加解密操作。SM4算法因其高效性和安全性,在需要数据加密的应用中具有重要价值。
3. 《Windows C/C++加密解密实战》5.3.7
- ASN.1文法描述:ASN.1用于描述数据结构,包括原子类型和结构类型。数据类型可以是通用的、应用特定的、私有的或上下文特定的。每种类型都有一个唯一的类型标识(Tag)。
- 编码规则:
- BER:基本编码规则,允许数据自包含结构信息,使用TLV(Tag, Length, Value)三元组进行编码。BER支持定长和不定长编码方式。
- DER:区分编码规则,是BER的子集,用于确保数据的唯一编码。DER编码是唯一的,适合安全技术应用,如电子商务系统。
- CER:规范编码规则,主要用于早期的X.509证书。
- PER:打包编码规则,用于压缩数据以减少编码后的数据大小。
- 数据类型标识:
- 通用类(Universal):所有应用中定义相同。
- 应用类(Application):只为某一种应用定义。
- 私有类(Private):为特定企业或公司定义。
- 上下文说明类(Context Specific):为特定类型定义。
- 派生数据类型:
- 显式派生法:改变数据类型的编码,使用新的类型标识。
- 隐式派生法:改变数据类型的标识值,但不改变编码方式。
- 数据类型的ASN.1描述和DER编码:
- 隐式派生类:改变类型标识值以区分相同类型的数据成员。
- 显式派生类型:不改变数据类型,但使用新的类型标识。
- BIT STRING:用于编码任意比特串,如数字签名结果。
- IA5STRING:用于编码ASCII码字符组成的字符串。
- INTEGER:用于编码任意整数。
- OBJECT IDENTIFIER:用于标识算法或属性类型。
- OCTET STRING:用于编码任意字节串,如摘要数据。
- SEQUENCE:用于定义有序且成员数量固定的结构。
总结
每种数据类型都有其特定的ASN.1描述和DER编码规则,这些规则确保了数据在不同系统和网络中的一致性和互操作性。DER由于其唯一性和适合安全应用的特性,被广泛认为是电子商务和安全系统中的首选编码规则。
对 AI 总结的反思与补充(2分)
要求
- AI总结的问题
- 自己的补充
反思与补充
1. 反思
在学习中利用AI助手对知识点进行总结,可以帮助我们对知识点进行梳理,有助于我们更全面地理解、掌握学习内容。同时,AI助手还能帮助我们对不理解的知识点展开更为详细的解释,确保我们能对所学内容清晰掌握。
2. 补充
1. Head First C 嗨翻 C 语言 第8章
- 函数指针在C语言中非常有用,但它们也增加了代码的复杂性。理解它们如何在底层工作,以及如何安全地使用它们,对于编写健壮的程序至关重要。
- 指针的指针在处理复杂的数据结构时非常有用,但它们也增加了代码的复杂度。在实际编程中,它们通常用于实现数据结构,如链表、树等。
- 递归是一种强大的编程技术,但它也可能导致栈溢出等问题。理解递归的工作原理和如何正确使用它,对于解决复杂问题非常重要。
2. 《Windows C/C++加密解密实战》3.4.4
- 理论与实践结合:虽然书中提供了SM4算法的理论基础和实现示例,但实际应用中需要更多地考虑如何将理论应用到实际项目中,解决实际问题。
- 安全性考量:在实现加密算法时,除了算法本身的安全性,还需要考虑实现的安全性,比如密钥管理、侧信道攻击防护等。
3. 《Windows C/C++加密解密实战》5.3.7
- 实际应用场景的重要性:
学习ASN.1和编码规则不仅仅是理论上的,更重要的是理解它们在实际应用中的作用。例如,在安全协议、数据传输、分布式系统中,ASN.1和DER/BER的使用确保了数据的一致性和安全性。- 编码效率:
虽然DER提供了一种唯一的编码方式,适合安全应用,但它可能不是最高效的编码方式。在某些情况下,PER或BER的压缩特性可能更适合带宽有限的环境。
学习思维导图(2分)
要求
- Mermaid 代码与截图(参考Mermaid MindMap语法)或者提交思维导图链接(如果使用线上编辑器,推荐processon,xmind,…)
思维导图
1. Head First C 嗨翻 C 语言 第8章
2. 《Windows C/C++加密解密实战》3.4.4
3. 《Windows C/C++加密解密实战》5.3.7
基于 AI 的学习(2分)
要求
- 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
- 参考下面提示语或者使用 AI Agent
提示词:“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
- 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
- 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
- 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
- AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容
1. 针对SM4算法进行提问
2. 针对编码规则进行提问
作业提交要求(1分)
- 提交Markdown 文件,文档命名“学号姓名《密码系统设计》.md”
- 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
- 提交代码托管链接(可选):学号姓名 gitee(github) 链接
- 内容质量高有加分
参考资料
- AI工具(你使用的AI工具及其链接)
- Kimi
- 图书
- 《Windows C/C++加密解密实战》
- Head First C 嗨翻 C 语言