尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

2025-2026-1 20231301 《信息安全设计》第六周学习总结
📅 发布时间:2026/6/19 18:16:42

View Post

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

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

目录
  • 作业信息
  • 学习内容总结
    • 一、Windows密码体系架构深度解析
    • 二、CryptoAPI核心编程实战
    • 三、CSP服务架构详细图示
    • 四、高级特性与性能优化

作业信息

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

学习内容总结

第九章:CSP和CryptoAPI

一、Windows密码体系架构深度解析

1. CSP体系结构层次

应用程序层↓
CryptoAPI接口层↓
CSP服务提供层↓
硬件/软件实现层

2. CSP分类与特性

  • Microsoft Base Cryptographic Provider:基础软件CSP
  • Microsoft Enhanced Cryptographic Provider:增强软件CSP
  • 硬件CSP:智能卡、USB Key、TPM等
  • 第三方CSP:厂商自定义实现

二、CryptoAPI核心编程实战

1. 完整的加密示例代码

#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>#pragma comment(lib, "advapi32.lib")// 使用CSP进行数据加密
BOOL EncryptDataWithCSP(const BYTE* plaintext, DWORD plaintext_len, BYTE** ciphertext, DWORD* ciphertext_len) {HCRYPTPROV hProv = 0;HCRYPTKEY hKey = 0;BOOL success = FALSE;// 获取CSP上下文if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {printf("CryptAcquireContext failed: %d\n", GetLastError());return FALSE;}// 生成会话密钥if (!CryptGenKey(hProv, CALG_RC4, CRYPT_EXPORTABLE, &hKey)) {printf("CryptGenKey failed: %d\n", GetLastError());CryptReleaseContext(hProv, 0);return FALSE;}// 计算密文缓冲区大小DWORD buf_len = plaintext_len;if (!CryptEncrypt(hKey, 0, TRUE, 0, NULL, &buf_len, 0)) {printf("CryptEncrypt size calc failed: %d\n", GetLastError());goto cleanup;}// 分配密文缓冲区*ciphertext = (BYTE*)malloc(buf_len);memcpy(*ciphertext, plaintext, plaintext_len);*ciphertext_len = plaintext_len;// 执行加密if (!CryptEncrypt(hKey, 0, TRUE, 0, *ciphertext, ciphertext_len, buf_len)) {printf("CryptEncrypt failed: %d\n", GetLastError());free(*ciphertext);success = FALSE;} else {success = TRUE;}cleanup:if (hKey) CryptDestroyKey(hKey);if (hProv) CryptReleaseContext(hProv, 0);return success;
}// 使用CSP创建数字证书并签名
BOOL CreateDigitalSignature(const BYTE* data, DWORD data_len, BYTE** signature, DWORD* signature_len) {HCRYPTPROV hProv = 0;HCRYPTKEY hKey = 0;HCRYPTHASH hHash = 0;BOOL success = FALSE;// 获取CSP并创建密钥容器if (!CryptAcquireContext(&hProv, "MyKeyContainer", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) {printf("CryptAcquireContext failed: %d\n", GetLastError());return FALSE;}// 生成签名密钥对if (!CryptGenKey(hProv, AT_SIGNATURE, 0, &hKey)) {printf("CryptGenKey failed: %d\n", GetLastError());goto cleanup;}// 创建哈希对象if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) {printf("CryptCreateHash failed: %d\n", GetLastError());goto cleanup;}// 哈希数据if (!CryptHashData(hHash, data, data_len, 0)) {printf("CryptHashData failed: %d\n", GetLastError());goto cleanup;}// 获取签名长度if (!CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, NULL, signature_len)) {printf("CryptSignHash size failed: %d\n", GetLastError());goto cleanup;}// 分配签名缓冲区并签名*signature = (BYTE*)malloc(*signature_len);if (!CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, *signature, signature_len)) {printf("CryptSignHash failed: %d\n", GetLastError());free(*signature);success = FALSE;} else {success = TRUE;}cleanup:if (hHash) CryptDestroyHash(hHash);if (hKey) CryptDestroyKey(hKey);if (hProv) CryptReleaseContext(hProv, 0);return success;
}

2. CryptoAPI密钥管理实战

// 导出和导入RSA密钥对
BOOL ExportRSAPrivateKey(HCRYPTPROV hProv, HCRYPTKEY hKey, BYTE** key_blob, DWORD* blob_len) {// 导出PRIVATEKEYBLOBif (!CryptExportKey(hKey, 0, PRIVATEKEYBLOB, 0, NULL, blob_len)) {printf("CryptExportKey size failed: %d\n", GetLastError());return FALSE;}*key_blob = (BYTE*)malloc(*blob_len);if (!CryptExportKey(hKey, 0, PRIVATEKEYBLOB, 0, *key_blob, blob_len)) {printf("CryptExportKey failed: %d\n", GetLastError());free(*key_blob);return FALSE;}return TRUE;
}// 从密钥BLOB导入密钥
HCRYPTKEY ImportRSAPrivateKey(HCRYPTPROV hProv, const BYTE* key_blob, DWORD blob_len) {HCRYPTKEY hKey = 0;if (!CryptImportKey(hProv, key_blob, blob_len, 0, 0, &hKey)) {printf("CryptImportKey failed: %d\n", GetLastError());return 0;}return hKey;
}

三、CSP服务架构详细图示

graph TBA[应用程序] --> B[CryptAcquireContext]B --> C[获取CSP句柄]C --> D[CryptGenKey/ImportKey]D --> E[获取密钥句柄]E --> F{操作类型}F --> G[加密/解密]F --> H[哈希运算]F --> I[数字签名]F --> J[密钥交换]G --> K[CryptEncrypt/Decrypt]H --> L[CryptCreateHash/HashData]I --> M[CryptSignHash/VerifySignature]J --> N[CryptDeriveKey/ExportKey]K --> O[处理结果]L --> OM --> ON --> Osubgraph CSP实现层P[软件CSP] --> Q[算法实现]R[硬件CSP] --> S[智能卡/TPM]T[第三方CSP] --> U[自定义算法]endO --> PO --> RO --> T

四、高级特性与性能优化

1. 会话密钥与持久密钥

  • 会话密钥:临时使用,不持久化存储
  • 持久密钥:保存在密钥容器中,可重复使用

2. 密钥派生函数使用

// 使用密码派生密钥
BOOL DeriveKeyFromPassword(HCRYPTPROV hProv, LPCWSTR password, HCRYPTKEY* phKey) {HCRYPTHASH hHash = 0;// 创建哈希对象if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash)) {return FALSE;}// 哈希密码if (!CryptHashData(hHash, (BYTE*)password, wcslen(password)*2, 0)) {CryptDestroyHash(hHash);return FALSE;}// 从哈希派生密钥if (!CryptDeriveKey(hProv, CALG_3DES, hHash, 0, phKey)) {CryptDestroyHash(hHash);return FALSE;}CryptDestroyHash(hHash);return TRUE;
}

截屏2025-09-30 下午9.18

相关新闻

  • 贼猴 0930 模拟赛 T2 | 计数
  • 题解:AT_abc311_h [ABC311Ex] Many Illumination Plans
  • SuperMap iObjects .NET 11i 二次开发(十五)—— 类型转换之面转点 - 教程

最新新闻

  • 2026苏州钻石回收实测|国标4C定级,全城无套路靠谱门店变现指南 - 薛定谔的梨花猫
  • C语言宽字符处理:wmemcmp、wmemcpy、wprintf核心函数详解与实战
  • 多模态大语言模型LISA
  • 2026长沙回收百达翡丽手表门店分级指南,一线标杆店铺评级,区分正规与小作坊 - 名奢变现站
  • 如何通过WeChatMsg实现微信聊天记录的本地化解析与数据主权保护?
  • 告别GUI开发噩梦:用Dear ImGui在30分钟内为C++项目添加专业界面

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号