在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
10-安全传输平台项目-第11天(客户端代码移植-项目模块总结)
目录:
一、复习
二、安全传输平台项目——客户端代码移植-项目模块总结
1、图形客户端-密钥协商组件分析
2、图形客户端-物理组件集成
3、图形客户端-Linux源码对接错误调试
4、图形客户端-系统初始化
5、图形客户端-删除控件对应函数
6、图形客户端-密钥协商
7、图形客户端-密钥协商内存释放错误说明
8、总结
9、接口设计
10、文件加密原理
11、文件加密函数源码
12、数字证书、非对称加密
一、复习
1、复习-连接数据库
2、复习-网点信息管理
二、安全传输平台项目——客户端代码移植-项目模块总结
1、图形客户端-密钥协商组件分析
》SecMngClient协商客户端 界面设计及功能实现和SecMngServer配置管理 大体相同:
1)打开“VS”,新建Dialog,ID更改为:IDD_DIALOG_CLIENT,布局如下:
2)在“IDD_DIALOG_CLIENT”界面右键“添加类”,类名输入:CViewClient,基类选择:CFormView
3)使用类向导,为ListCtrl添加成员变量:
注意:自定义变量m_imageList不是通过类向导定义的,是通过代码定义的!
4)在MainFrm.cpp中OnOutbarNotify函数中打开case代码,增加调用(去掉return 0)
5)“类向导”中(ViewClient.cpp)重写OnInitialUpdate函数;和DlgNetInfo类似!
6)在“IDD_DIALOG_CLIENT”界面中为按钮设置ID并添加回调函数;
回调函数的逻辑在Linux下已经做过:借助wind图形界面(客户端与服务器密钥协商、密钥校验、密钥注销)与linux客户端 文字界面(与 服务器密钥协商、密钥校验、密钥注销)逻辑一样,所以这块代码不用写了,把Linux下的代码移植过来。当然还需要更改!
对比分析:
》分析wind客户端和服务器 与 linux客户端和服务器 4大基础组件区别:
1)统一报文编码解码 libmessagereal.so .h ---> .dll .lib .h
2)统一通信组件socket --- windows socket 通信
3)共享内存 --- windows shm 机制
4)数据库访问 (客户端无需数据库)
》代码如下:
1)报文编解码_win
>messagereal.dll
>messagereal.lib
>keymng_msg.h
#ifndef _KEYMNG_MSG_H_ #define _KEYMNG_MSG_H_ #ifdef __cplusplus extern "C" { #endif #define KeyMng_ParamErr 200 //输入参数失败 #define KeyMng_TypeErr 201 //输入类型失败 #define KeyMng_MallocErr 202 //分配内存失败 #define KeyMng_NEWorUPDATE 1 //1 密钥更新 #define KeyMng_Check 2 //2 密钥校验 #define KeyMng_Revoke 3 //3 密钥注销 ; #define ID_MsgKey_Req 60 //密钥请求报文 typedef struct _MsgKey_Req { //1 密钥更新 //2 密钥校验; //3 密钥注销 int cmdType; //报文命令码 char clientId[12]; //客户端编号 char AuthCode[16]; //认证码 char serverId[12]; //服务器端I编号 char r1[64]; //客户端随机数 }MsgKey_Req; //密钥应答报文 #define ID_MsgKey_Res 61 typedef struct _MsgKey_Res { int rv; //返回值 char clientId[12]; //客户端编号 char serverId[12]; //服务器编号 unsigned char r2[64]; //服务器端随机数 int seckeyid; //对称密钥编号 //modfy 2015.07.20 }MsgKey_Res; /* pstruct : 输入的报文数据 ; (指向相应结构体的指针) type : 输入的类型标识(函数内部通过type 得到 pstruct 所指向的报文类型) poutData: 输出的编码后的报文 ; outlen : 输出的数据长度; */ int MsgEncode( void *pStruct , /*in*/ int type, unsigned char **outData, /*out*/ int *outLen ); /* inData : 输入的编码后的数据; inLen : 输入的数据长度 ; pstruct : 输出的解码后的数据; (其空间是在内部开辟的,也需要用内部定义的free函数进行释放) type : 结构的类型标识(返回类型标识,使得调用者通过flag进行判断,将pstruct 转换为相应的结构) */ int MsgDecode( unsigned char *inData,/*in*/ int inLen, void **pStruct /*out*/, int *type /*out*/); /* 释放 MsgEncode( )函数中的outData; 方法:MsgMemFree((void **)outData, 0); 释放MsgDecode( )函数中的pstruct结构体,MsgMemFree((void **)outData, type); type : 输入参数,便于函数判断调用哪个结构体的free函数 */ int MsgMemFree(void **point,int type); #ifdef __cplusplus } #endif #endif