【无标题】

密码系统设计

第三周预习报告

学习内容

学习内容

AI 对学习内容的总结(1分)

要求
  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结

《Head First C》第4章总结
使用多个源文件
分解代码:大型程序不应只有一个庞大的源文件,而应将代码分解成小的、可管理的块,然后重新组合成一个大程序。
数据类型细节:C语言可以处理多种数据类型,包括字符、整数、浮点数等。每种数据类型都有其特定的用途和存储大小。
函数声明与定义分离:为了在多个文件中共享函数,需要将函数的声明(prototype)放在头文件(.h)中,而函数的定义(implementation)放在源文件(.c)中。
编译多个源文件:使用编译器(如gcc)时,可以通过一次性指定所有相关的.c文件来编译多个源文件,生成一个可执行文件。
使用make工具:make工具可以帮助自动化编译过程,只重新编译自上次构建以来已更改的文件,从而提高构建效率。
数据类型
char:用于存储单个字符,实际上是以其字符代码形式存储的数字。
int:用于存储整数,至少16位,通常足以存储数百万级别的数字。
long:用于存储大整数,至少32位,但在许多机器上与int大小相同。
float:用于存储大多数日常浮点数,如咖啡中的液体量。
double:用于需要高精度的计算,比float占用更多内存,可以存储更大和更精确的数字。
short:如果只需要存储较小的整数,可以使用short来节省内存。
函数声明与定义
声明:告诉编译器函数的名称、参数和返回类型,但不包含函数体。
定义:包含函数的实际代码。
编译过程
预处理:处理#include指令和宏。
编译:将C代码转换为汇编语言。
汇编:将汇编代码转换为机器代码(目标文件)。
链接:将多个目标文件组合成一个可执行文件。
《Windows C/C++加密解密实战》第4章总结
杂凑函数(Hash函数)
定义:杂凑函数将任意长度的输入消息转换为固定长度的输出(杂凑值)。
安全性:杂凑函数应该是单向的,难以逆向推导出原始输入,且具有抗碰撞性(不同输入不应产生相同的输出)。
应用:用于数据完整性校验、数字签名等。
HMAC
定义:HMAC(Hash-Based Message Authentication Code)是一种基于哈希函数和密钥的消息认证方法。
设计目标:提供消息完整性认证和信源身份认证。
算法描述:HMAC通过对消息和密钥进行两轮哈希运算来生成消息认证码。
SHA系列算法
概述:SHA(Secure Hash Algorithm)是美国NIST和NSA设计的标准哈希算法,包括SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)等。
发展史:从SHA-0(1993年)到SHA-1(1995年),再到SHA-2(2002年)。
核心思想:接收明文,将其转换为固定长度的字符串(消息摘要)。
实现
手工实现:通过C语言代码实现SHA256和SHA512算法。
基于OpenSSL实现:使用OpenSSL库中的函数来实现SHA256和SHA512算法,简化了实现过程。
这两章内容涵盖了C语言的高级特性,如使用多个源文件和数据类型,以及密码学中的杂凑函数和HMAC算法。如果你有更具体的问题或需要更深入的解释,请告诉我。

对 AI 总结的反思与补充(2分)

要求
  • AI总结的问题
  • 自己的补充
反思与补充

《Head First C》第4章补充
函数声明与定义
声明与定义分离:在C语言中,可以将函数的声明(prototype)放在头文件中,而将定义(implementation)放在源文件中。这样做的好处是可以在多个源文件中共享同一个函数的定义,而不需要在每个文件中重复编写相同的代码。
编译和链接
编译过程:在编译过程中,预处理器首先处理源代码,然后编译器将处理后的源代码转换成汇编代码,最后汇编器将汇编代码转换成机器代码。
链接过程:链接器将多个目标文件(.o或.obj)链接成一个可执行文件。这个过程确保了所有函数和变量的正确引用。
使用make工具
自动化构建:make工具通过读取makefile文件来自动化构建过程。makefile中定义了目标文件、依赖关系和构建规则。make工具根据这些规则来决定哪些文件需要重新编译。
《Windows C/C++加密解密实战》第4章补充
杂凑函数的安全性
抗碰撞性:一个安全的杂凑函数应该具有抗碰撞性,即很难找到两个不同的输入,它们产生相同的杂凑值。
单向性:杂凑函数应该是单向的,即从杂凑值几乎不可能逆向推导出原始输入。
HMAC的安全性
密钥管理:HMAC的安全性在很大程度上依赖于密钥的保密性。如果密钥被泄露,HMAC的安全性就会受到威胁。
SHA算法的应用
数字签名:SHA算法常用于数字签名,确保数据的完整性和验证数据的来源。
密码学协议:在许多密码学协议中,如SSL/TLS和IPSec,SHA算法用于生成消息摘要,以验证数据的完整性。
实现注意事项
手工实现:手工实现SHA算法时,需要仔细处理每一个细节,包括消息填充、消息扩展、循环处理等。
库函数实现:使用OpenSSL等库函数实现SHA算法可以简化代码,但需要确保库的安全性和正确性。

学习思维导图(2分)

要求
思维导图

mindmap
root((第三周))
《Head First C》第四章
数据类型
运算符
控制结构
函数
指针
字符串
输入和输出
内存管理
错误处理
头文件和多源文件
《Windows C/C++加密解密实战》第四章
杂凑函数概述
SM3杂凑算法
HMAC
SHA系列杂凑算法
更通用的基于OpenSSL的哈希运算

上面mermaid实际效果,vscode中可以预览:
在这里插入图片描述

![](https://img-blog.csdnimg.cn/img_convert/a8f8420da10471911e992d9edbd39628.png

基于 AI 的学习(2分)

要求
  • 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
  • 参考下面提示语或者使用 AI Agent

概念1:编译和链接过程

编译器在编译过程中主要做了哪些工作?
预处理器在编译过程中扮演什么角色?
编译器如何将高级C语言代码转换为汇编代码?
汇编器如何将汇编代码转换为机器代码?
在链接过程中,链接器是如何将多个目标文件合并成一个可执行文件的?
如果有多个源文件引用了同一个函数,链接器是如何处理这种情况的?
什么是符号解析,它在链接过程中起到什么作用?
什么是重定位,为什么在链接过程中需要进行重定位?

概念2:杂凑函数的单向性和抗碰撞性

杂凑函数的单向性是什么意思?
为什么单向性对于杂凑函数来说很重要?
能否给出一个简单的例子来说明单向性的概念?
什么是抗碰撞性,它与单向性有什么区别?
在实际应用中,如何验证一个杂凑函数是否具有抗碰撞性?
如果一个杂凑函数不具备抗碰撞性,会有什么安全隐患?
有没有已知的杂凑函数被证明不具备抗碰撞性的例子?
如何设计一个具有强单向性和抗碰撞性的杂凑函数?
杂凑函数的这些特性对于数据安全有哪些实际意义?

学习内容

这两章内容不仅介绍了C语言的编程技巧,如使用多个源文件和make工具,还涉及了密码学中的杂凑函数和HMAC算法。这些内容对于理解大型软件项目的开发和维护以及数据安全至关重要。

学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)

问题:理解函数声明与定义的分离以及如何通过头文件共享函数声明可能会有难度。
解决办法:创建简单的程序,将函数声明放在头文件中,定义放在源文件中,然后尝试在不同的源文件中包含头文件,以加深理解。
问题:编译和链接的过程可能对初学者来说比较抽象,难以理解。
解决办法:通过阅读编译器和链接器的文档,以及使用编译器的不同选项来观察输出结果,可以加深对编译和链接过程的理解。
问题:将密码学概念应用于实际问题可能会遇到理解和应用上的困难。
解决办法:通过阅读密码学的基础教材和实际案例,以及参与相关的密码学实践项目,可以提高应用密码学概念的能力。

作业提交要求(1分)

  1. 提交Markdown 文件,文档命名“学号姓名《密码系统设计》.md”
  2. 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
  3. 提交代码托管链接(可选):学号姓名 gitee(github) 链接
  4. 内容质量高有加分

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值