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

news/2025/9/30 21:25:53/文章来源:https://www.cnblogs.com/twilight0966/p/19121794

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

作业-1

实验任务一task1-1#include<stdio.h> #include<stdlib.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");printf(" O \n");printf("…

MacOS拉取git代码报.DS_Store 冲突修复

命令到冲突的文件夹下 1、先查看当前目录下面是否有.DS_Store 这个文件ls -a2、如果存在则继续运行git rm -r --cached .DS_Store

国家住房和城乡建设部官方网站下载百度官方网站

什么是&#xff1f;为什么&#xff1f;需要负载均衡 一个网站在创建初期&#xff0c;一般来说都是只有一台服务器对用户提供服务 ​ 从图里可以看出&#xff0c;用户经过互联网直接连接了后端服务器&#xff0c;如果这台服务器什么时候突然 GG 了&#xff0c;用户将无法访问这…

自己有网站怎么做点卡?商业网点建设中心网站

720云全景漫游制作工具自2014年8月上线后&#xff0c;为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务&#xff0c;获得众多创作者的青睐与认可&#xff0c;同时也承载了创作者越来越多的期望&#xff0c;为了给大家提供更灵活多样的功能…

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

完整教程:Java核心 之JVM

完整教程:Java核心 之JVM2025-09-30 21:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

如何查询网站备案信息查询如何注册公司营业执照

使用rm -rf命令转载于:https://www.cnblogs.com/dyh-air/p/7726611.html

如何查询网站的注册信息黄骗免费网站

文章目录 1.计算机网络的功能:2.计算机网络的分类:3.主机间的通信方式:4.电报交换、报文交换、分组交换的区别:5.计算机网络的性能指标:6.0SI模型和TCP/IP模型:7.通信信通的方式:8.端到端的通信与点到点通信的区别:9.同步通信和异步通信:10.频分复用、时分复用、波分复用和码分…

9.30 闲话

never be back,but i am back于是我越来越念旧 czh: 不出意外的话,这应该是我的最后一舞了,之后 OI 可能就只是当做消遣了。已经初四,感觉继续冲 OI 希望已经不大,更何况在强省,又何况同校的同级的也比我强很多。…

哈尔滨建站模板搭建中铁建设登录入口

在.NET Core中实现Docker一键部署&#xff0c;通常涉及以下几个步骤&#xff1a;编写Dockerfile以定义镜像构建过程、构建Docker镜像、运行Docker容器&#xff0c;以及&#xff08;可选地&#xff09;使用自动化工具如Docker Compose或CI/CD工具进行一键部署。以下是一个详细的…

C语言⽂件管理讲解(1)

C语言⽂件管理讲解(1)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

前沿的设计网站做百度收录的网站

T2I Adapter是一款轻量级适配器&#xff0c;用于控制文本到图像模型并为其提供更准确的结构指导。它通过学习文本到图像模型的内部知识与外部控制信号&#xff08;如边缘检测或深度估计&#xff09;之间的对齐来工作。 T2I Adapter的设计很简单&#xff0c;条件被传递到四个特征…

深圳商城网站设计费用近一周的热点新闻

比我想象得要简单&#xff0c;看到了这里的讨论&#xff1a; v2ray是否可以局域网共享&#xff1f; Issue #210 v2ray/v2ray-core GitHub 这个博客就简单记录一下。相信有需求的朋友不止我一个。

长春行业网站男女做暧昧试看网站

新质生产力是未来几年着重发展的方向&#xff0c;关于如何实现产业化升级&#xff0c;各厂家会在自身的基础上进行产业化调整升级&#xff0c;利用新工具、新手段&#xff0c;大幅缩短研发设计周期&#xff0c;从而让产品迭代速度不断加快&#xff1b;提升产品品质&#xff0c;…

Min-p采样:通过动态调整截断阈值让大模型文本生成兼顾创造力与逻辑性

大语言模型的工作原理说起来很直接:根据输入内容和已生成的文本,预测下一个最合适的词(token)。输入先转换成 token,再变成向量表示,最后在输出层重新转回 token。 真正的挑战在于如何从候选词中做出选择。这个过…

2025 年快速卷帘门品牌最新推荐排行榜:聚焦智能定制与高效供货,精选快速卷帘门实力厂家

如今,快速卷帘门已成为工业生产、物流仓储、商业运营等领域保障通行效率与环境稳定的核心设备,市场需求持续增长。但当前市场品牌鱼龙混杂,部分厂家为降低成本,采用劣质材料与简化工艺,导致产品故障率高、维护成本…

ARL灯塔搭建

灯塔是一个综合性的资产探测工具,由于年代过于久远缺乏维护导致环境配置起来经常会报一些莫名奇妙的错误(哭)#自动化-综合架构-ARL&Nemo ARL灯塔 项目地址:https://github.com/TophantTechnology/ARL 介绍: 旨…

记 Charles 抓不到包 - Higurashi

发现是因为没有配置好 SSL 代理,打开Proxying->SSL proxying settings:应该如下配置:参考:Charles 抓包抓不到数据

贼猴 0930 模拟赛 T2 | 计数

没有传送门。 非常有意思的一道题,都是独立想出来的。 题意 维护一个序列,支持单点修改,查询全局所有长度为 \(k\) 的区间,区间中不同数字个数的和。 序列长度 \(n\),操作次数 \(m\),满足 \(n, k, m \leq 3 \tim…