《密码系统设计》第二周

news/2024/11/17 5:46:06/文章来源:https://www.cnblogs.com/RoyWang1108/p/18415153

第二周预习报告

学习内容

  • 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章

  1. 函数指针:学习如何声明和使用函数指针,这是C语言中一个强大的特性,允许将函数作为参数传递给其他函数。
  2. 返回函数指针:了解如何从函数中返回函数指针,这在创建回调函数时非常有用。
  3. 动态内存分配:深入探讨如何在堆上分配和释放内存,这是管理大型数据结构和复杂程序中资源的关键。
  4. 指针和数组:进一步理解指针和数组之间的关系,以及如何通过指针操作数组。
  5. 指针的指针:学习如何使用指向指针的指针,这在处理多维数组和复杂的数据结构时非常有用。
  6. 结构体和联合:介绍如何定义和使用结构体和联合,这些是C语言中创建复杂数据类型的方式。
  7. 递归函数:探讨如何编写递归函数,这是一种通过函数自身调用来解决问题的方法。
  8. 错误处理:学习如何在函数中进行错误检查和处理,以确保程序的健壮性。
  9. 标准库函数:介绍一些常用的标准库函数,如mallocfreememcpy等,这些函数在C语言编程中非常重要。
  10. 函数的高级用法:可能还会包括一些函数的高级用法,如变长参数列表的使用。

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

  1. ASN.1文法描述:ASN.1用于描述数据结构,包括原子类型和结构类型。数据类型可以是通用的、应用特定的、私有的或上下文特定的。每种类型都有一个唯一的类型标识(Tag)。
  2. 编码规则
  • BER:基本编码规则,允许数据自包含结构信息,使用TLV(Tag, Length, Value)三元组进行编码。BER支持定长和不定长编码方式。
    - DER:区分编码规则,是BER的子集,用于确保数据的唯一编码。DER编码是唯一的,适合安全技术应用,如电子商务系统。
    - CER:规范编码规则,主要用于早期的X.509证书。
    - PER:打包编码规则,用于压缩数据以减少编码后的数据大小。
  1. 数据类型标识
  • 通用类(Universal):所有应用中定义相同。
  • 应用类(Application):只为某一种应用定义。
  • 私有类(Private):为特定企业或公司定义。
  • 上下文说明类(Context Specific):为特定类型定义。
  1. 派生数据类型
  • 显式派生法:改变数据类型的编码,使用新的类型标识。
  • 隐式派生法:改变数据类型的标识值,但不改变编码方式。
  1. 数据类型的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知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

学习内容

1. 针对SM4算法进行提问




2. 针对编码规则进行提问


作业提交要求(1分)

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

参考资料

  • AI工具(你使用的AI工具及其链接)
  • Kimi
  • 图书
  • 《Windows C/C++加密解密实战》
  • Head First C 嗨翻 C 语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797574.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

活动召集丨实时多模态 AI Builder 团聚!RTE Open Day@S创上海,9.20/21

9 月 20~21 日,上海, S创上海 2024,看见不一样的创新和技术。这场年轻、多元、活力十足的科技盛会,将汇聚创业者、开发者、艺术家和众多无法定义边界的跨界者。RTE 开发者社区的 Builders 和 RTE Open Day 也将玩乐其中!「有一群人在一起,就很好」。 来到第四期的 RTE O…

问题1:pytorch版本不同,文件运行速度不同

好像新版本更快一点哦,为什么呢? 版本1: PyTorch version: 1.12.1Is CUDA available? TrueCUDA version: 11.3cuDNN version: 8302版本2: PyTorch version: 2.3.1+cu121Is CUDA available? TrueCUDA version: 12.1cuDNN version: 8907

踩坑日志2:dataloader的num_workers问题

当我想用dataloader多开子进程加快图片加载速度时,发现报有关进程的错误:RuntimeError: An attempt has been made to start a new process before thecurrent process has finished its bootstrapping phase.This probably means that you are not using fork to start your…

深度!程序员生涯的垃圾时间(上)

深度好文!程序员的垃圾时间! 垃圾时间(Garbage time)是体育赛事中的术语,指一场比赛中双方分差过大,胜负已定。此时,比赛剩余的时间不再对最终结果产生决定性影响,剩下的时间就被称为垃圾时间。将这个词用在浩浩荡荡的技术革命、汹涌向前的历史车轮上,再合适不过。时代…

基于Java+Springboot+Vue开发的民宿预订管理系统

项目简介该项目是基于Java+Springboot+Vue开发的民宿预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的民宿预订管理系统项目,大学生可以在实践中学…

基于Java+Springboot+Vue开发的电影订票管理系统

项目简介该项目是基于Java+Springboot+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的电影订票管理系统项目,大学生可以在实践中学…

解决c盘无故被大量占用问题

解决c盘无故被大量占用问题 问题引出 在用win10、win11的时候经常遇到c盘莫名其妙的就被占用完了,即便清理后也还是没将内存释放出来,这可能是因为虚拟内存过大导致的。 虚拟内存是什么 1.Windows虚拟内存机制 Windows虚拟内存是一种内存管理技术,它允许计算机在物理内存不足…

xyctf2024 pwn

hello world checksec大多保护都开启了 main函数 int __fastcall main(int argc, const char **argv, const char **envp) {char buf[20]; // [rsp+0h] [rbp-20h] BYREFinit();printf("%s", "please input your name: ");read(0, buf, 0x48uLL);printf(&qu…

BILIBILI 字幕提取教程简略版

首先是通过 F12 拿到 AID 和 CID(见其它文章),然后调用这个接口: https://api.bilibili.com/x/player/wbi/v2?aid={av}&cid={cid}{"code":0,"message":"0","ttl":1,"data":{"aid":1855215937,"bvid…

k8s Service 服务

目录一、为什么需要 Service二、Kubernetes 中的服务发现与负载均衡 -- Service三、用例解读1、Service 语法2、创建和查看 Service四、Headless Service五、集群内访问 Service六、向集群外暴露 Service七、操作示例1、获取集群状态信息2、创建 Service、Deployment3、创建客户…

获取动态页面html

AJAX AJAX(异步JavaScript和XML)是一种无需重新加载整个页面的情况下,与服务器交换数据,将增量信息局部更新在用户界面上的技术。AJAX具有异步性,AJAX请求不会阻塞用户界面,用户可以在请求处理的同时继续与页面交互,具有更强的交互性。AJAX能使网页从浏览器请求少量信息…

V-By-One协议详解

V-By-One协议详解 V-By-One协议简介 V-by-One是一种高速串行接口技术,由日本赛恩电子公司(THine Electronics)开发,主要用于平板显示器的信号传输。它旨在替代传统的LVDS(Low Voltage Differential Signaling)技术,提供更高的传输速率和更低的功耗。 V-By-One协议特点及…