### cad图纸加密C++实现 #### 一、概述 CAD(Computer-Aided Design)图纸是工程设计领域中不可或缺的一部分,其安全性和保密性至关重要。在实际应用中,为防止未经授权的访问或修改,通常需要对CAD图纸进行加密处理。本文档介绍了一种使用C++语言实现的CAD图纸加密方法,并提供了部分代码示例。 #### 二、关键知识点详解 ##### 1. 密码输入处理 在CAD图纸加密过程中,密码输入的安全性和正确性非常重要。本段代码实现了一个简单的密码输入功能,通过注册消息过滤器`MessageFilter`来处理键盘输入事件,确保密码字符不会直接显示出来,并对某些特殊键(如Backspace、Enter、Escape和空格键)进行特殊处理,提高安全性。 ```cpp int resultLen; int crTerminated; BOOL MessageFilter(MSG *pMsg) { if (pMsg->message == WM_CHAR) { int keyCode = pMsg->wParam; if (keyCode != 8 && keyCode != 13 && keyCode != 27 && ((keyCode != 32) || crTerminated)) { // keyCode 8 is Backspace // Keycode 27 is Escape // KeyCode 32 is Space (only avoided if crOnly is used) pMsg->wParam = 42; // For Security against subsequent hooks, and display pMsg->lParam = 589825; // Set these two to reflect '*' key stroke pResult[resultLen] = keyCode; // but keep the real keycode. resultLen++; } if (keyCode == 8 && resultLen) resultLen--; } return FALSE; } ``` ##### 2. 安全参数设置 在加密CAD图纸之前,需要设置一系列安全参数,这些参数用于指定加密算法、密钥长度等。以下代码展示了如何创建一个`SecurityParams`对象并配置必要的属性。 ```cpp SecurityParams* SetSecurityParams(wchar_t* wszPassword) { SecurityParams* pSecParams = new SecurityParams; pSecParams->cbSize = sizeof(SecurityParams); pSecParams->ulFlags = SECURITYPARAMS_ENCRYPT_DATA; pSecParams->ulAlgId = SECURITYPARAMS_ALGID_RC4; // Must always be this value. pSecParams->wszProvName = L"Microsoft Base Cryptographic Provider v1.0"; pSecParams->ulKeyLength = 40; pSecParams->ulProvType = PROV_RSA_FULL; // Defined in wincrypt.h pSecParams->wszCertIssuer = NULL; pSecParams->wszCertSerialNum = NULL; pSecParams->wszComment = NULL; pSecParams->wszPassword = wszPassword; return pSecParams; } ``` ##### 3. 加密CAD文件 加密CAD文件的过程涉及读取文件、设置安全参数以及执行具体的加密操作。这里提供了一个简单的命令`AsdkREADDWG`,用于读取指定的CAD文件,并请求用户输入密码,之后可以进一步扩展加密逻辑。 ```cpp void AsdkREADDWG() { struct resbuf res; if (acedGetFileD(L"Read Drawing", NULL, L"dwg", NULL, &res) == RTNORM) { ACHAR szPassword[MAX_PATH]; if (acedGetPassword(1, L"\nPlease Enter Password:", szPassword) == RTNORM) { // Note: For consistency, it is a good idea // to convert the password here to uppercase } } } ``` #### 三、总结 本文档提供了一个基于C++语言的CAD图纸加密实现方案。通过上述代码示例可以看出,在CAD图纸加密过程中,需要考虑密码输入的安全性、加密算法的选择与配置等多个方面。此外,还可以根据实际需求进一步完善加密算法和流程,例如增加密码强度验证、使用更复杂的加密算法等,以提高CAD图纸的安全性。
#include "string.h"
#include "wchar.h"
#include "wincrypt.h"
ACHAR *pResult;
int resultLen;
int crTerminated;
BOOL MessageFilter(MSG *pMsg)
{
if(pMsg->message==WM_CHAR)
{
int keyCode=pMsg->wParam;
if(keyCode!=8 && keyCode!=13 && keyCode!=27 && ((keyCode!=32)||crTerminated))
{
// keyCode 8 is Backspace
// Keycode 27 is Escape
// Keycode 32 is Space (only avoided if cronly is used)
pMsg->wParam = 42;// For Security against subsequent hooks, and display
pMsg->lParam = 589825;// Set these two to reflect '*' keystroke
pResult[resultLen] = keyCode;// but keep the real keycode.
resultLen++;
}
if(keyCode == 8 && resultLen)
resultLen--;
}
return FALSE;
}
int acedGetPassword(int cronly, ACHAR* prompt, ACHAR* result)
{
ACHAR tempResult[135];
pResult=result;
resultLen=0;
int resultVal;
crTerminated=cronly;
acedRegisterFilterWinMsg(MessageFilter);// Set the Hook.
resultVal=acedGetString(cronly, prompt, tempResult);// Call GetString...
acedRemoveFilterWinMsg(MessageFilter);// Remove the Hook.
result[resultLen]='\0';// Null terminate the result
return resultVal;
}
SecurityParams* SetSecurityParams(wchar_t *wszPassword)
{
SecurityParams *pSecParams=new SecurityParams;
pSecParams->cbSize=sizeof(SecurityParams);
pSecParams->ulFlags=SECURITYPARAMS_ENCRYPT_DATA;
pSecParams->ulAlgId=SECURITYPARAMS_ALGID_RC4; // Must always be this value.
pSecParams->wszProvName=L"Microsoft Base Cryptographic Provider v1.0";
pSecParams->ulKeyLength=40;
pSecParams->ulProvType=PROV_RSA_FULL;// Defined in wincrypt.h
pSecParams->wszCertIssuer=NULL;
pSecParams->wszCertSerialNum=NULL;
pSecParams->wszComment=NULL;
剩余6页未读,继续阅读
- 粉丝: 1
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 无人机辅助应急通信中总和速率最大化的优先用户关联附matlab代码.rar
- 无人机辅助移动边缘计算系统中的轨迹优化与计算卸载策略python代码.rar
- 无人机轨迹跟踪matlab仿真.rar
- 无人机轨迹跟踪simulink仿真.rar
- 无人机轨迹与路径规划matlab仿真.rar
- 无人机航路规划算法matlab代码.rar
- 无人机降落伞 Simulink 模型.rar
- 无人机路径规划和轨迹算法的实现 matlab代码.rar
- 无人机转弯方式函数包附matlab代码.rar
- 无人机双基地SAR matlab实现.rar
- 无人机视频处理matlab代码.rar
- 效率网络分析仪(ENA)通过图形用户界面计算通信网络中主要多址协议在不同负载条件下的性能Matlab代码.rar
- 无人系统自助航路规划及自助避碰程序仿真 matlab代码.rar
- 系链四旋翼无人机-海上机车浮标系统MATLAB实现.rar
- 一个轻量级、高性能的C、C++和MATLAB卡尔曼滤波器库.rar
- 一维弦振动和二维鼓面振动的理论解的数值实现 matlab代码.rar