• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

twilight0966

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

2025-2026-1 20231301 《信息安全设计》第一周学习总结

2025-2026-1 20231301 《信息安全设计》第一周学习总结

作业信息

作业 链接
作业课程 <班级>(2025-2026-1 信息安全设计)
作业要求 <作业>(2025-2026-1 信息安全设计 预习作业要求)
作业目标 <《Windows C/C++ 加密解密实战》> 预习第一、二章
作业正文 <博客>(第一周学习总结)

目录
  • 2025-2026-1 20231301 《信息安全设计》第一周学习总结
    • 作业信息
    • 学习内容总结
      • 《Windows C/C++ 加密解密实战》第一章
        • 密码学简史
        • 密码学的基本概念
      • 《Windows C/C++ 加密解密实战》第二章
        • 密码编程的国际库
        • OpenSSL 的目录结构
        • OpenSSL 的调用方式
        • OpenSSL 支持的对称加密算法
        • OpenSSL 支持的非对称加密算法
        • OpenSSL 支持的信息摘要算法
        • OpenSSL 的密钥和证书管理
        • 面向对象与 OpenSSL
        • OpenSSL 文件操作与加密接口
        • Windows 下编译 OpenSSL 1.1.1
        • 静态库
        • 动态库
      • 思维导图
      • 安装gcc+openssl+gmssl
      • 参考

学习内容总结

《Windows C/C++ 加密解密实战》第一章

密码学简史

密码学的基本概念

  • 密码学:研究信息系统安全保密的科学,分为密码编码学(设计密码体制)和密码分析学(破译密文)。

  • 密码学解决的五大问题

问题 描述 解决方案
机密性 确保信息仅能被授权用户获取 使用密码算法加密信息
可用性 保障信息资源随时可提供服务 设计高可用性系统
完整性 检测信息在传输或存储过程中是否被篡改 使用密码函数生成信息“指纹”
认证性 确保消息来源和内容未被伪造 使用密钥和认证函数
不可否认性 用户无法否认曾经进行的信息生成、签发、接收行为 使用数字签名
  • 密码学中的五元组
  1. 明文(Plaintext):原始信息,用m或p表示。
  2. 密文(Ciphertext):明文加密后的结果,用c表示。
  3. 密钥(Key):参与密码变换的参数,用k表示。
  4. 加密算法(Encryption Algorithm):将明文转换为密文的函数,用E表示,公式为c=Ek(p)。
  5. 解密算法(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

  1. 安装 ActivePerl

编译 OpenSSL 需要 Perl 解释器,推荐使用 ActivePerl。下载地址:ActivePerl 官网。

  1. 下载 OpenSSL 1.1.1

从 OpenSSL 官网下载源码:OpenSSL 1.1.1b。

  1. 安装 VC

使用 Visual Studio 2017 的 C 编译器编译 OpenSSL。

  1. 编译步骤
    解压源码:将 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

  1. 测试编译结果

编译完成后,生成的文件目录结构如下:

目录 内容描述
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 版本动态库

思维导图

截屏2025-09-13 下午3.27

安装gcc+openssl+gmssl

截屏2025-09-18 下午8.02

截屏2025-09-18 下午8.01

截屏2025-09-18 下午8.01

截屏2025-09-19 上午9.12

参考

Mac安装homebrew
Mac安装homebrew2

截屏2025-09-16 上午9.28

截屏2025-09-16 上午9.31

截屏2025-09-16 上午9.35

截屏2025-09-16 上午9.35

posted on 2025-09-13 15:41  20231301周子昂  阅读(14)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3