提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
第一周预习报告
学习内容
- 《Windows C/C++加密解密实战》第 1,2 章
- 第一章概念复习
- 第二章主要在 Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上),如果默认不是,参考下面脚本
openssl 安装,opensslinstall.sh:
#! /bin/sh
### openssl
VER=3.3.2
CUROPENSSL=openssl-${VER}
cd
ROCHOME=$(pwd)
if [ ! -d rocopenssl ];
then
mkdir rocopenssl
mkdir rocopensslsrc
mkdir rocopenssldir
fi
if [ ! -f ~/${CUROPENSSL}.tar.gz ];
then
wget https://www.openssl.org/source/${CUROPENSSL}.tar.gz
tar -zxvf ~/${CUROPENSSL}.tar.gz -C ~/rocopensslsrc
cd ~/rocopensslsrc/${CUROPENSSL}
./config --prefix=${ROCHOME}/rocopenssl --openssldir=${ROCHOME}/rocopenssldir
make
# make test
sudo make install
fi
UNAME=$(uname -a)
result=$(echo ${UNAME} | grep "ubuntu")
if [ "$result" != "" ]; then
sudo mv -f /usr/lib/x86_64-linux-gnu/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3.rocbaknewopenssl
sudo mv -f /usr/lib/x86_64-linux-gnu/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3.rocbaknewopenssl
sudo ln -sf ${ROCHOME}/rocopenssl/lib64/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
sudo ln -sf ${ROCHOME}/rocopenssl/lib64/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3
sudo mv -f /usr/bin/openssl /usr/bin/opensslbak
sudo ln -sf ${ROCHOME}/rocopenssl/bin/openssl /usr/bin/openssl
fi
UNAME=$(uname -a)
result=$(echo ${UNAME} | grep "WSL")
if [ "$result" != "" ]; then
sudo mv -f /usr/lib/x86_64-linux-gnu/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3.rocbaknewopenssl
sudo mv -f /usr/lib/x86_64-linux-gnu/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3.rocbaknewopenssl
sudo ln -sf ${ROCHOME}/rocopenssl/lib64/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3
sudo ln -sf ${ROCHOME}/rocopenssl/lib64/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.3
sudo mv -f /usr/bin/openssl /usr/bin/opensslbak
sudo ln -sf ${ROCHOME}/rocopenssl/bin/openssl /usr/bin/openssl
fi
openssl version
rm ~/${CUROPENSSL}.tar.gz
gmssl 安装 gmsslinstall.sh:
#!/bin/bash
# 目录名称
GmDIR="GmSSL-3.1.1-Linux"
# 检查目录是否存在
if [ -d "$GmDIR" ]; then
echo "已经安装了GmSSL,脚本将退出。"
exit 0
fi
# 文件名称
FILE="GmSSL-Linux.sh"
URL="https://github.com/guanzhi/GmSSL/releases/download/v3.1.1/GmSSL-3.1.1-Linux.sh"
TEMP_FILE="GmSSL-3.1.1-Linux.sh"
# 检查文件是否存在
if [ ! -f "$FILE" ]; then
# 下载并重命名文件
wget -O "$TEMP_FILE" "$URL"
mv "$TEMP_FILE" "$FILE"
fi
cp ./GmSSL-Linux.sh ~
cd ~
./GmSSL-Linux.sh
echo "安装GmSSL成功"
echo 'export PATH="$HOME/GmSSL-3.1.1-Linux/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="$HOME/GmSSL-3.1.1-Linux/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
. ~/.bashrc
echo "Init GmSSL ENV successfully"
AI 对学习内容的总结(1分)
要求
- 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结
第一章和第二章的学习内容主要围绕密码学的基础知识和密码学在编程中的应用,特别是在C和C++环境中的加密解密实战。以下是两章内容的总结:
第一章:密码学概述
- 密码学历史:介绍了密码学的起源,从古代到现代的发展,以及它在军事、间谍活动中的应用。
- 密码学的重要性:随着信息技术的发展,密码学在保护通信和数据安全方面变得越来越重要。
- 经典案例:通过玛丽女王的密码案例,展示了密码学在历史上的实际应用和其对个人命运的影响。
- 密码学基本概念:包括密码编码学和密码分析学,以及它们在保护信息安全中的作用。
- 密码学解决的问题:机密性、可用性、完整性、认证性和不可否认性。
- 密码学五元组:明文、密文、密钥、加密算法和解密算法。
- 加解密算法分类:对称算法和非对称算法,以及它们的特点和应用场景。
第二章:搭建C和C++密码开发环境
- 密码编程库:介绍了OpenSSL和Crypto++这两个重要的密码学编程库,它们提供了一系列密码学算法和工具。
- OpenSSL库:详细讲解了OpenSSL库的功能、源代码结构、加密库调用方式、支持的加密算法(对称和非对称)、信息摘要算法、密钥和证书管理。
- OpenSSL编译安装:指导了如何在Windows和Linux系统下编译和安装OpenSSL库,包括不同版本的OpenSSL(如1.1.1和1.0.2m)。
- 实战应用:提供了使用OpenSSL进行加密解密的示例代码,以及如何在C和C++程序中调用OpenSSL库。
- 国产密码开发库GmSSL:介绍了GmSSL库的特点、历史和下载安装方法,以及如何在Windows和Linux系统下编译和安装GmSSL。
- GmSSL命令行工具:展示了如何使用GmSSL的命令行工具进行密码学运算,如SM3哈希计算。
- GmSSL程序验证:提供了使用GmSSL库进行加密解密操作的示例代码,并指导了如何在C和C++程序中调用GmSSL库。
对 AI 总结的反思与补充(2分)
要求
- AI总结的问题
缺乏细节:第一章的总结相对简洁,没有包含很多具体的技术细节或实例。例如,对于“玛丽女王的密码”这一节,可以简要描述一下它如何反映了历史上的密码学实践,以及密码学中的基本概念和问题。
内容完整性:总结中没有提到“密码学中的五元组”和“加解密算法的分类”的具体内容,这些内容对于理解密码学基础很重要。
OpenSSL介绍过于简短:在OpenSSL简介部分,可以更详细地介绍其特性和应用领域,如安全性、支持多种加密算法等。
Crypto++和GmSSL的介绍不够全面:Crypto++和GmSSL的介绍部分只提到了简单的编译和使用示例,但没有涵盖它们的特色功能、性能比较、与其他库的兼容性等方面的内容。
缺乏实际示例:整个第二章的总结中,缺少具体的代码示例或应用场景,这些可以帮助读者更好地理解这些库的使用方法和效果。
反思与补充
基本概念
密码学:研究秘密通信的学科,包括加密、解密、密钥管理等内容。
加密:将明文(可理解的信息)转换成密文(不可直接理解的信息)的过程。
解密:将密文转换回明文的过程。
密钥:用于加密和解密操作的秘密信息。
密码学中的五元组
通常包括:明文、加密算法、密钥、密文和解密算法。这五个元素共同构成了密码系统的基本框架。
加解密算法的分类
对称加密算法:加密和解密使用相同密钥的算法,如AES、DES等。
非对称加密算法:加密和解密使用不同密钥的算法,如RSA、ECC等。
信息摘要算法:用于生成数据的唯一“指纹”,如MD5、SHA等,主要用于完整性验证。
OpenSSL的使用
命令行工具:OpenSSL提供了丰富的命令行工具,用于执行各种加密、解密、证书管理等操作。
编程接口:OpenSSL提供了C语言的编程接口(如EVP接口),允许开发者在自己的应用程序中使用OpenSSL的加密功能。
注意事项
版本兼容性:不同版本的OpenSSL可能支持不同的加密算法和特性,开发者需要注意选择合适的版本。
安全性:随着安全漏洞的不断被发现,OpenSSL也会不断发布更新版本,开发者需要及时关注并更新自
己的OpenSSL库。
GmSSL介绍
GmSSL:是基于OpenSSL的扩展库,支持国密算法(如SM2、SM3、SM4等)。
编译与安装:在Windows和Linux下的编译安装步骤与OpenSSL类似,但需要注意下载和安装的是GmSSL
的源码包。
使用场景:GmSSL适用于需要支持国密算法的场合,如金融行业、政府机构等。
学习思维导图(2分)
代码
mindmap
root((密码系统设计第一周))
教材第一章
密码定义与概念
密码功能
密码机制(密码系统)
第二章
OpenSSL最新版在Linux上的安装应用
GmSSL最新版在Linux上的安装应用
课件
网络空间安全
密码与密码系统
法律法规与标准
密码应用与密评
实践
gitee(github)
openssl
gmssl
-
Mermaid 代码与mindmap
root((密码系统设计第一周))
教材第一章
密码定义与概念
密码功能
密码机制(密码系统)第二章
OpenSSL最新版在Linux上的安装应用
GmSSL最新版在Linux上的安装应用课件
网络空间安全
密码与密码系统
法律法规与标准
密码应用与密评
实践
gitee(github)
openssl
gmssl截图(参考Mermaid MindMap语法)或者提交思维导图链接(如果使用线上编辑器,推荐processon,xmind,…)
思维导图
下面是个简单mermaid的思维导图,你可以根据你自己的需求修改
mindmap
root((密码系统设计第一周))
教材
第一章
密码定义与概念
密码功能
密码机制(密码系统)
第二章
OpenSSL最新版在Linux上的安装应用
GmSSL最新版在Linux上的安装应用
课件
网络空间安全
密码与密码系统
法律法规与标准
密码应用与密评
实践
gitee(github)
openssl
gmssl
上面mermaid实际效果,vscode中可以预览:
基于 AI 的学习(2分)
要求
- 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
- 参考下面提示语或者使用 AI Agent
提示词:“我在学习XXX知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”
- 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
- 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
- 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
- AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容
学习内容
我向ai提问不可否认性与OpenSSL这个两个知识点,下面是对提问不可否认性的过程展示
我:我在学习密码学基础中的不可否认性知识点,请你以苏格拉底的方式对我进行提问,一次一个问题
ai:当然可以。苏格拉底式的提问法是一种通过提问引导对方深入思考和探索问题本质的方法。让我们
开始吧:你能否告诉我,当你提到“不可否认性”时,你首先想到的是什么?
我:不可以拒绝
ai:很好,你提到了“不可否认性”与“不可拒绝”有关。那么,第二个问题: 在密码学中,为什么我们需要
确保信息的发送者不能否认他们发送了某个信息?这种需求在现实世界中有哪些应用场景?
学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)
至少两个
问题一:GmSSL无法安装
解决过程:
1.检查依赖:确保你的系统已经安装了 GmSSL 所需的所有依赖项,如 Perl、编译器(如 gcc)、make 工具等。
2.使用正确的版本:确保你下载的 GmSSL 版本与你的操作系统和架构兼容。
3.清理环境:如果你之前尝试安装过,可能需要清理旧的编译文件和配置。可以尝试删除之前的安装目录和编译生成的文件。
4.查看错误日志:仔细阅读编译过程中的错误日志,通常这些日志会告诉你哪里出了问题。
5.权限问题:确保你有足够的权限来安装软件。在 Linux 上,你可能需要使用 sudo 来获取必要的权限。
6.安装路径:如果你指定了安装路径,确保该路径存在且有写权限。
7.使用预编译包:如果可能,尝试使用你的操作系统的包管理器来安装 GmSSL,这样可以自动处理依赖和配置。
8.查看文档:查阅 GmSSL 的官方文档或安装指南,看看是否有特定的安装步骤或已知的问题。
搜索类似问题:搜索互联网上是否有人遇到并解决了类似的问题。
问题二:markdown无法生成思维导图
解决过程:询问同学得知Markdown书写过程中不能自动生成思维导图,这通常是由于VS Code本身并不直接支持Markdown到思维导图的自动转换功能。所以得借助其他的思维导图软件 但如果我想要在预览的过程看到思维导图,可以在VS Code中下载插件Markdown Mindmap”或“Graphviz Markdown Preview”等。
作业提交要求(1分)
- 提交Markdown 文件,文档命名“学号姓名《密码系统设计》.md”
- 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
- 提交代码托管链接(可选):学号姓名 gitee(github) 链接
- 内容质量高有加分
参考资料
- AI工具(你使用的AI工具及其链接)
- 图书
- 网站