首页 > 其他分享 >第一周预习

第一周预习

时间:2024-09-08 22:04:26浏览次数:5  
标签:AES 加密 第一周 ++ Crypto 预习 OpenSSL 密钥

密码系统设计

推荐VSCode中安装Markdown插件markdown pdf 插件完成作业

第一周预习报告

学习内容

AI 对学习内容的总结

kimi总结

1.OpenSSL:

OpenSSL是一个开源的密码学工具包,提供了丰富的加密通信协议,如SSL和TLS。
介绍了OpenSSL的源代码模块结构,包括Crypto(加密算法库)、SSL(安全套接层协议库)和Apps(应用程序)。
详细说明了如何在Windows和Linux系统下编译和安装OpenSSL,包括不同版本的编译方法,如32位和64位的Debug和Release版本。
展示了如何在C++程序中使用OpenSSL库,包括如何加载算法、配置和清理资源。
提供了OpenSSL命令行工具的使用示例,如查看版本、支持的算法和计算文件的Hash值。

2.Crypto++:

Crypto++是一个C++密码学库,提供了多种加密算法和加密模式。
讲解了如何在Linux系统下编译Crypto++库,并使用其进行AES加密和解密的示例。
强调了Crypto++的功能全、统一性好,适合学习和研究密码学。

3.GmSSL:

GmSSL是一个支持国密算法的密码学库,可以用于构建符合国密标准的安全应用。
介绍了GmSSL的特点,如支持SM2/SM3/SM4等国密算法,以及其在多个项目中的应用。
详细说明了在Windows和Linux系统下编译和安装GmSSL的步骤。
提供了GmSSL命令行工具的使用示例,以及如何在C++程序中使用GmSSL库。

对 AI 总结的反思与补充

反思与补充

1.OpenSSL模块结构描述不够准确:
AI提到了OpenSSL包括Crypto(加密算法库)、SSL(安全套接层协议库)和Apps(应用程序)。但实际上,OpenSSL的模块结构更为复杂,不仅仅包含这三个部分。OpenSSL的库主要分为libcrypto(加密算法库)和libssl(SSL/TLS协议库)两大部分,而Apps通常指的是OpenSSL提供的一系列命令行工具,用于测试和使用OpenSSL库的功能。

2.GmSSL的介绍略显简略:
AI提到GmSSL是一个支持国密算法的密码库,但没有详细说明它是如何与OpenSSL结合使用的。GmSSL是基于OpenSSL的一个分支,增加了对中国商用密码算法(如SM2, SM3, SM4等)的支持。在Windows和Linux环境下编译和安装GmSSL的过程与OpenSSL类似,但需要特别注意配置选项和依赖库的处理。

3.缺少Crypto++的Windows编译过程:
AI只提到了Crypto++在Linux下的编译和使用,但没有提及Windows下的编译和使用方法。实际上,Crypto++在Windows下也可以通过编译源码生成库文件,并在C++项目中使用这些库。

4.缺少OpenSSL和Crypto++的具体代码示例:
AI提到了在C++程序中使用OpenSSL库和Crypto++库的示例,但没有给出具体的代码示例。在实际总结中,可以加入一些简单的代码示例,如使用OpenSSL进行RSA加密或解密,或使用Crypto++进行AES加密和解密的代码,以便读者更好地理解如何在项目中应用这些库。

学习思维导图

思维导图

代码

mindmap
  root((密码系统设计第一周))
    教材
        第一章
            密码定义与概念
            密码功能
            密码机制(密码系统)
        第二章
            OpenSSL最新版在Linux上的安装应用
            GmSSL最新版在Linux上的安装应用
    课件
        网络空间安全
        密码与密码系统
        法律法规与标准
        密码应用与密评
    实践
        gitee(github)
        openssl
        gmssl

思维导图

基于 AI 的学习

学习内容

我:我正在学习怎么使用Crpto++进行AES加解密知识点,请你以苏格拉底的方式对我进行提问,一次一个问题
AI:
很好,你对使用Crypto++库进行AES加解密感兴趣。那么,让我问你第一个问题:
你知道AES代表什么吗?
我:对称加密算法,关于AES我很了解我想知道怎么用Cryto++库使用它
AI:
很好,你已经对AES有了基本的了解。那么,让我们更进一步:
在Crypto++库中,你首先需要包含哪些头文件来使用AES算法?
我:iostream,aes.h
AI:
接近了,但Crypto++库中使用AES算法通常需要特定的头文件。让我再问你一个问题:
为了使用Crypto++库中的AES算法,你需要包含哪些Crypto++特有的头文件?
我:针对这个问题,你的回答是
AI:
在Crypto++库中使用AES算法,你需要包含以下头文件:
#include <cryptopp/aes.h> - 这是Crypto++库中AES算法的主要头文件。
#include <cryptopp/modes.h> - 包含加密模式,如CBC、ECB等。
#include <cryptopp/filters.h> - 包含加密过程中使用的过滤器。
#include <cryptopp/hex.h> - 如果你需要对数据进行十六进制编码或解码。
这些头文件将允许你使用Crypto++库中的AES加密和解密功能。例如,你可以使用AES::Encryption和AES::Decryption类来进行加密和解密操作,使用CBC_Mode<AES>类来设置加密模式,以及使用StreamTransformationFilter来进行实际的加密和解密处理
我:针对怎么使用Crpto++进行AES加解密知识点,我理解了吗
AI:
你已经展示了对Crypto++库中AES算法使用的基础知识的理解。为了确保你完全理解,让我问你几个问题来检验你的理解:
在Crypto++中,你如何选择AES算法的密钥长度?
你如何生成一个随机的初始化向量(IV)?
在Crypto++中,你通常使用哪种模式来进行AES加密?你有没有例子代码来展示如何使用这种模式?
如何使用Crypto++库对字符串进行加密和解密?
我:你的回答是
AI:
在Crypto++中,你可以通过AES::DEFAULT_KEYLENGTH来选择AES算法的默认密钥长度,这通常是128位、192位或256位。如果你需要指定不同的密钥长度,你可以使用AES::MIN_KEYLENGTH和AES::MAX_KEYLENGTH来获取允许的最小和最大密钥长度。
你可以通过使用AutoSeededRandomPool类来生成一个随机的初始化向量(IV)。例如:
AutoSeededRandomPool prng;
SecByteBlock iv(AES::BLOCKSIZE);
prng.GenerateBlock(iv, iv.size());
这里SecByteBlock是一个用于存储字节数据的类,AES::BLOCKSIZE是AES块的大小,通常是16字节。
在Crypto++中,常用的AES加密模式包括CBC(密码块链接模式)、ECB(电子密码本模式)、CFB(密文反馈模式)等。
使用Crypto++库对字符串进行加密和解密,你可以使用StringSource和StreamTransformationFilter。
当你使用Crypto++库进行AES加密时,你如何确保密钥和IV的安全性?例如,你如何安全地存储和传输它们?
我:通过使用Crypto++库进行AES加密时,确保密钥和IV的安全性需要采取一系列措施,包括随机生成密钥和IV、安全存储和传输以及使用安全的通信协议等。这些措施将有助于提高加密过程的安全性,保护敏感数据不被未经授权的访问和泄露,我的回答结束了,请对我的回答进⾏评价总结
AI:
你的回答涵盖了确保密钥和IV安全性的多个方面,这是非常全面的。以下是对你回答的总结和评价:
1. **密钥和IV的生成**:你正确地指出了密钥和IV应该是随机或伪随机生成的。这是确保加密强度的关键步骤,因为可预测的或重复使用的密钥和IV会大大降低加密系统的安全性。
2. **密钥和IV的传输**:你提到了密钥和IV不应该以明文形式在网络上传输,这是正确的。通常,可以使用非对称加密算法(如RSA)对密钥进行加密,然后再将加密后的密钥传输给对方。IV可以随密文一起传输,因为它不需要保密,只要密钥保持安全,IV的安全性不会影响整体加密的安全性。
3. **填充方式**:你提到了在AES加密中,如果明文的长度不是数据块长度的整数倍,则需要进行填充。这是正确的,并且你提到了常用的填充方式,如PKCS5Padding、PKCS7Padding和ZeroPadding等。这些填充机制确保了数据块的完整性,并且是AES加密过程中的一个重要步骤。
4. **加密模式**:你的回答中没有直接提到加密模式,但在你提供的搜索结果中提到了AES支持的加密模式,如CBC、ECB等。选择合适的加密模式对于确保数据安全至关重要。
5. **实际代码示例**:你提供的搜索结果中包含了实际的代码示例,这些示例展示了如何使用Crypto++库进行AES加密和解密。这为理解和实现加密过程提供了实用的参考。

总的来说,你的回答显示了对AES加密过程中密钥和IV管理的深刻理解,并且提供了实用的信息和资源。这些都是确保加密过程安全的重要方面。

我:我正在学习怎么使用openssl命令知识点,请你以苏格拉底的方式对我进行提问,一次一个问题
AI:
你能否描述一下OpenSSL中的encrypt和decrypt命令通常如何使用?比如,它们需要哪些参数,以及这些参数通常如何指定?
我:你的回答是?
AI:
在OpenSSL中,加密和解密操作通常涉及使用`openssl enc`命令。以下是一些基本的使用方式:

1. **加密文件**:
   bash
   openssl enc -aes-256-cbc -in plaintextfile -out encryptedfile -pass pass:mysecretpassword
   这里,`-aes-256-cbc`指定了加密算法(AES-256-CBC),`-in`指定了输入文件(待加密的明文文件),`-out`指定了输出文件(加密后的文件),`-pass`指定了密码。

2. **解密文件**:
   bash
   openssl enc -aes-256-cbc -d -in encryptedfile -out decryptedfile -pass pass:mysecretpassword
   在这个命令中,`-d`选项表示进行解密操作。其他参数与加密时相同。

3. **使用Base64编码加密**:
   bash
   openssl enc -aes-256-cbc -a -in plaintextfile -out encryptedfile -pass pass:mysecretpassword
   添加`-a`或`-base64`选项可以使加密结果使用Base64编码,这样加密后的文件可以在不支持二进制的系统(如电子邮件)中安全传输。

4. **生成密钥**:
   bash
   openssl genrsa -out private_key.pem 2048
   这个命令生成一个2048位的RSA私钥,并将其保存到`private_key.pem`文件中。

5. **生成证书签名请求(CSR)**:
   bash
   openssl req -new -key private_key.pem -out csr.pem
   使用私钥文件生成一个证书签名请求(CSR),通常用于向证书颁发机构(CA)申请证书。

6. **生成自签名证书**:
   bash
   openssl x509 -req -days 365 -in csr.pem -signkey private_key.pem -out certificate.pem
   这个命令使用CSR和私钥生成一个自签名的证书,有效期为365天。
这些是OpenSSL命令的一些基本用法。每个命令都有更多的选项和参数,可以根据需要进行调整。如果你有特定的使用场景或需要进一步的指导,请告诉我。

我:针对使用openssl命令知识点,我理解了吗
AI:
你能解释一下在使用openssl enc命令进行文件加密时,为何需要指定一个密码(-pass参数),并且这个密码对于解密过程来说为什么是必需的吗?
我:由于加密和解密使用的是同一个密钥,因此在解密过程中,必须提供与加密时相同的密码,以便能够重新推导出相同的对称密钥,进而将密文还原为明文。如果解密时提供的密码与加密时使用的密码不一致,那么推导出的密钥也会不同,从而导致解密失败,无法正确还原出原始数据。
我:我的回答结束了,请对我的回答进⾏评价总结
AI:
你的回答是正确的。在对称加密中,加密和解密确实使用相同的密钥。因此,为了解密加密的数据,必须使用与加密时相同的密钥。由于这个密钥通常是通过用户提供的密码经过一定的处理(如散列或密钥派生函数)得到的,所以在解密时需要重新使用相同的密码来生成密钥。

你的回答很好地概括了为什么在OpenSSL的`openssl enc`命令中需要`-pass`参数,以及为什么在解密时必须使用与加密时相同的密码。这表明你对OpenSSL命令行工具的使用以及加密和解密的基本概念有清晰的理解。

总结来说,你的回答显示了以下几点理解:
1. 对称加密中加密和解密使用相同的密钥。
2. 密钥通常由用户提供的密码生成。
3. 为了解密,必须使用与加密时相同的密码来生成密钥。
4. 如果密码不正确,解密过程将失败。

这些都是加密解密流程中的关键概念,你的回答表明你对这些概念有正确的理解。如果你有更深入的问题或需要了解更多关于OpenSSL的高级用法,随时可以提问。

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

至少两个

  • 问题 1,安装openeuler最新版本时,使用中文版本屏幕出现花屏
    解决过程:
    在博客园搜寻到相关问题的帖子,发现可以通过使用更高版本的虚拟机或者英文版本的openeuler即可,重新安装英文版openeuler下载成功
  • 问题 2,unbuntu版本更新,通过知乎指导进行更新https://zhuanlan.zhihu.com/p/694832548
    解决过程:
  • ...

标签:AES,加密,第一周,++,Crypto,预习,OpenSSL,密钥
From: https://www.cnblogs.com/yanglang11/p/18403590

相关文章

  • 9月第一周漏洞学习
    蜂信物联(FastBee)物联网平台download存在任意文件下载漏洞漏洞描述FastBee是一款开源物联网平台,致力于为全球开发者提供稳定、搞笑的物联网解决方案。FastBee在download接口中存在任意文件下载漏洞,可能导致敏感信息泄露、数据盗窃及其他安全风险,从而对系统和用户造成严重危害fof......
  • 20221402-信息安全设计第一周预习报告
    第一周预习报告学习内容第一章概念复习我在微信读书上简单阅读了《WindowsC/C++加密解密实战》第1、2章,并且借助了微信读书的AI大纲功能了解了每一章节的核心内容第一章第一章里主要介绍了密码学简史和一些最基本的密码常识,像五元组和算法分类我都在上学期的信息安全概论、......
  • 《密码系统设计》第一周
    目录密码系统设计第一周预习报告学习内容AI对学习内容的总结(1分)要求总结密码学基础:OpenSSL库:OpenSSL的编译与测试:Crypto++库:GmSSL库:总结:对AI总结的反思与补充(2分)反思与补充学习思维导图(2分)思维导图基于AI的学习(2分)学习内容一、二、学习实践过程遇到的问题与解决方式(AI驱动,优......
  • 第一周预习报告
    第一周预习报告学习内容《WindowsC/C++加密解密实战》第1、2章第一章:概念复习第二章:主要在Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上),如果默认不是,参考下面的脚本:openssl安装:opensslinstall.shgmssl安装:gmsslinstall.shAI对学习内容的总结(1分)......
  • 20221413杜佳妍《密码系统设计》第一周
    第一周预习报告学习内容《WindowsC/C++加密解密实战》第1,2章第一章概念复习第二章主要在Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上)AI对学习内容的总结(1分)要求让AI阅读学习内容并进行总结总结第一章概念复习1.基本概念密码学:一门研究......
  • 开学第一周9.1周日学习日记
    算法cf1989ABCDhttps://codeforces.com/contest/1989B最长公共子序列 //相当于枚举以b[i]为起点遍历a的最长公共子序列 //因为是子序列所以abacccab即使后面先取了第一个a也不影响最长长度#include<bits/stdc++.h>usingnamespacestd;voidsolve() { stringa......
  • 暑假第一周
    学习Hadoop数据库完成Hadoop基本概念学习本周我主要学习了Hadoop的基本概念和架构,涵盖了Hadoop的核心组件,如HDFS(HadoopDistributedFileSystem)和MapReduce。通过阅读官方文档、在线教程和相关书籍,我掌握了Hadoop的工作原理和主要功能。我还观看了几个教学视频,深入理解了HDFS......
  • 数据结构学习第一周
    本文需要掌握的知识1.认识数据结构2.了解数据结构(逻辑结构)的分类3.内存储器模型以及分配方式(物理结构)4.认识Node类5.简单了解泛型1.数据结构(D-S/DataStructure)1.1简介1.1.1数据分为原子数据和复合数据1.1.2结构分为逻辑结构和物理结构数据结构是由数据和数据......
  • 暑假集训第一周专题:树
    暑假集训第一周专题:树本专题其实还是看中对题目的阅读理解能力,dfs实现起来很简单,主要是知道题目到底要干嘛A.KuroandWalkingRoute题面输入输出思路即所有路线减去经过x到y的路线由x到y的路线,包括从某些点到x,经过一些点再到y,从y再到某些点有根据题目......
  • linux 第一周重点整合 (续)
    压缩指令:gzip说明:linux压缩文件为.gz(gzip)格式语法:gzip[选项]文件名选项:-r:可以将目录下的文件递归压缩-l:显示已经压缩文件的压缩信息-d:解压缩eg:gzipaa.c压缩aa.c文件gzip-daa.c.gz解压aa.c.gzgzip-ra递归压缩a文件夹,将a文件夹中的所有文件进行压缩,文件......