2025-2026-1 20231301 《信息安全设计》第一周学习总结
2025-2026-1 20231301 《信息安全设计》第一周学习总结
作业信息
| 作业 | 链接 |
|---|---|
| 作业课程 | <班级>(2025-2026-1 信息安全设计) |
| 作业要求 | <作业>(2025-2026-1 信息安全设计 预习作业要求) |
| 作业目标 | <《Windows C/C++ 加密解密实战》> 预习第一、二章 |
| 作业正文 | <博客>(第一周学习总结) |
学习内容总结
《Windows C/C++ 加密解密实战》第一章
密码学简史
密码学的基本概念
-
密码学:研究信息系统安全保密的科学,分为密码编码学(设计密码体制)和密码分析学(破译密文)。
-
密码学解决的五大问题
| 问题 | 描述 | 解决方案 |
|---|---|---|
| 机密性 | 确保信息仅能被授权用户获取 | 使用密码算法加密信息 |
| 可用性 | 保障信息资源随时可提供服务 | 设计高可用性系统 |
| 完整性 | 检测信息在传输或存储过程中是否被篡改 | 使用密码函数生成信息“指纹” |
| 认证性 | 确保消息来源和内容未被伪造 | 使用密钥和认证函数 |
| 不可否认性 | 用户无法否认曾经进行的信息生成、签发、接收行为 | 使用数字签名 |
- 密码学中的五元组
- 明文(Plaintext):原始信息,用m或p表示。
- 密文(Ciphertext):明文加密后的结果,用c表示。
- 密钥(Key):参与密码变换的参数,用k表示。
- 加密算法(Encryption Algorithm):将明文转换为密文的函数,用E表示,公式为c=Ek(p)。
- 解密算法(Decryption Algorithm):将密文恢复为明文的函数,用D表示,公式为p=Dk(c)。
- 加解密算法的分类
(1)对称算法:
特点:加密密钥和解密密钥相同。
优点:运算速度快,密钥较短。
缺点:密钥分发困难,难以解决不可否认问题。
(2)非对称算法:
特点:使用公钥和私钥。
优点:密钥分发容易,可实现数字签名。
缺点:运算速度慢,密钥较长。
《Windows C/C++ 加密解密实战》第二章
密码编程的国际库
- OpenSSL:功能强大,支持多种加密算法和协议,提供命令行工具和 API。
- Crypto++:纯 C++ 实现,适合 C++ 开发者。
OpenSSL 的目录结构
| 目录名 | 功能描述 |
|---|---|
| Crypto | 包含所有加密算法源码文件和相关标准 |
| SSL | 包含 SSL 协议和 TLS 协议的源码文件 |
| Apps | 包含 OpenSSL 应用程序的源码文件 |
| Docs | 包含使用说明文档 |
| Demos | 包含基于 OpenSSL 的应用程序示例 |
| Include | 包含使用 OpenSSL 库时需要的头文件 |
| Test | 包含 OpenSSL 功能测试程序的源码文件 |
OpenSSL 的调用方式
- 直接调用:通过 SSLeay 库直接调用加密函数。
- 接口调用:通过 OpenSSL 加密库接口调用。
- Engine 调用:通过 Engine 平台和 OpenSSL 对象调用。
OpenSSL 支持的对称加密算法
- 分组加密算法:AES、DES、Blowfish、CAST、IDEA、RC2、RC5。
- 流加密算法:RC4。
OpenSSL 支持的非对称加密算法
- DH:用于密钥交换。
- RSA:用于密钥交换和数字签名。
- DSA:用于数字签名。
- ECC:用于密钥交换和数字签名。
OpenSSL 支持的信息摘要算法
MD2、MD5、MDC2、SHA1、RIPEMD:用于生成信息摘要。
OpenSSL 的密钥和证书管理
支持标准:ASN.1、X.509、PKCS#12、PKCS#8。
功能:密钥生成、证书签发、吊销和验证。
面向对象与 OpenSSL
面向对象方法:OpenSSL 利用 C 语言实现面向对象设计,支持多种加密算法和协议。
BIO 接口:封装了 OpenSSL 的 I/O 操作,提供统一的接口函数。
BIO 接口
BIO 结构体:封装了文件、网络等 I/O 操作的函数接口。
BIO_METHOD:定义了各种 I/O 操作的函数接口。
OpenSSL 文件操作与加密接口
- 文件操作接口
OpenSSL 通过 BIO_METHOD 结构体定义文件操作接口,以下是文件类型 BIO 的接口定义:
static BIO_METHOD methods_filep =
{
BIO_TYPE_FILE,
" File pointer",
file_write,
file_read,
file_puts,
file_gets,
file_ctrl,
file_new,
file_free,
NULL,
};
- 网络操作接口
网络操作接口与文件操作接口类似,但前缀名和类型字段不同:
static BIO_METHOD methods_sockp = {
BIO_TYPE_SOCKET,
"socket",
sock_write,
sock_read,
sock_puts,
sock_ctrl,
sock_new,
sock_free,
NULL,
};
- 平台兼容性
在 Linux 系统中,Socket 类型与文件描述符(fd)类型可以通用,但在 Windows 系统中,两者不同。为了平台兼容性,OpenSSL 将文件操作和网络操作分开实现。
- EVP 加密接口
EVP 系列函数封装了 OpenSSL 加密库中的所有算法,通过统一的接口实现加密、解密、签名等功能。主要包含以下算法类型:
| 算法类型 | 函数名称 | 功能描述 | 相关文件 |
|---|---|---|---|
| 公开密钥算法 | EVPSeal..., EVPOpen... | 提供公开密钥算法的加密和解密 | p_seal.c, p_open.c |
| 数字签名算法 | EVP_Sign..., EVP_Verify... | 提供数字签名功能 | p_sign.c, p_verify.c |
| 对称加密算法 | EVP_Encrypt... | 提供对称加密功能 | evp_enc.c, p_enc.c, p_dec.c, e_*.c |
| 信息摘要算法 | EVPDigest... | 实现多种信息摘要算法 | digest.c, m_*.c |
| 信息编码算法 | EVPEncode... | 实现 ASCII 码与二进制码转换 | - |
Windows 下编译 OpenSSL 1.1.1
- 安装 ActivePerl
编译 OpenSSL 需要 Perl 解释器,推荐使用 ActivePerl。下载地址:ActivePerl 官网。
- 下载 OpenSSL 1.1.1
从 OpenSSL 官网下载源码:OpenSSL 1.1.1b。
- 安装 VC
使用 Visual Studio 2017 的 C 编译器编译 OpenSSL。
- 编译步骤
解压源码:将 openssl-1.1.1b.tar.gz 解压到指定目录。
配置 OpenSSL:在 VC 命令行中输入以下命令:
perl Configure debug-VC-WIN32 no-shared no-asm --prefix="d:/openssl-1.1.1b/win32-debug" --openssldir="d:/openssl-1.1.1b/win32-debug/ssl"
编译:使用 nmake 命令编译:
nmake
nmake test
nmake install
nmake clean
- 测试编译结果
编译完成后,生成的文件目录结构如下:
| 目录 | 内容描述 |
|---|---|
| bin | OpenSSL 命令行程序 |
| lib | 静态库 libcrypto.lib 和 libssl.lib |
| include | OpenSSL 头文件 |
静态库
示例代码
#include "pch.h"
#include "openssl/evp.h"
int main() {
openssl_add_all_algorithms();
printf("openssl ok\n");
return 0;
}
配置项目
包含头文件:在项目属性中添加 include 目录路径。
链接静态库:在项目属性中添加 lib 目录路径,并添加依赖项 ws2_32.lib; Crypt32.lib; libcrypto.lib;。
动态库
编译 Debug 版本动态库
思维导图

安装gcc+openssl+gmssl



![]()
参考
![]()

![]()
![]()
posted on 2025-09-13 15:41 20231301周子昂 阅读(14) 评论(0) 收藏 举报
浙公网安备 33010602011771号