# 第三方秘钥协商安全传输平台 **Repository Path**: zomb/c-secure-transmission-platform ## Basic Information - **Project Name**: 第三方秘钥协商安全传输平台 - **Description**: 基于c++编程的第三方秘钥协商安全传输平台,保证不同网点的安全传输。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 2 - **Created**: 2021-04-28 - **Last Updated**: 2024-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、项目简介 ​ 在学习完c++,系统编程等基础内容以后,就在网上找了关于c++方面的项目,下面这个项目是练手项目之一,一个C/S模型的全栈项目,关于源代码和项目的简介网上不难找到,这里讲述一些我对该项目的理解,和对项目的改进、代码的优化。 ​ 该项目名为多端安全协议传输平台,它主要是提供为其他通信或者服务提供第三方服务,即保证甲方通信的安全传输。 ​ 该项目主要实现第三方传输平台客户端和服务端之间如何进行秘钥协商,以及第三方平台对数据信息的注册等。协商完的秘钥能够提供给甲方进行数据加密,甲方只需要一个外联接口就能够实现数据的加解密通信,并可以借助软件界面来注册网点、秘钥等信息。 ![img](README.assets/clip_image002.jpg) ​ 因为觉得该项目具有普遍性,延伸性,因此将该项目作为c++的练手项目,其中大部分函数代码的封装自己都重写了一遍,并且项目的代码进行了一些优化改进,在此过程中,感觉对c语言如何封装成c++语言有了更深刻的认知,对高并发通信有了更深刻的了解,提升了自己的代码能力。 ## 二、模块划分 ![1615812610056](README.assets/1615812610056.png) 1. 基础组件 - 报文编解码组件 - 通信组件 - 进程间通信组件 - 数据库访问组件 2. 秘钥协商服务器&&客户端 3. 图形界面 - 配置管理终端 4. 加解密接口封装 - openssl中AES、DES、3DES的使用 ## 三、代码完善和优化 1. **功能的完善** 源代码的功能只实现了秘钥协商的功能,在此基础上我将秘钥校验、秘钥注销、秘钥查看三个基础功能进行了完善 ```cpp // 秘钥校验 int secKeyCheck(RequestMsg* reqMsg, char** outData, int& outLen); // 秘钥注销 int secKeyRevoke(RequestMsg* reqMsg, char** outData, int& outLen); // 秘钥查看 int secKeyView(RequestMsg* reqMsg, char** outData, int& outLen); ``` 2. **高并发机制的优化** 源代码用的高并发机制是多线程并发,考虑到需要在线程里写业务,并且每个业务逻辑其实算是短连接,因此我觉得在这里改为**线程池并发**来优化并发的性能比较好,因为线程池能够减少线程创建和销毁的开销,在并发量变化比较大的情况下性能会比较好,不采用epoll是因为连接时间比较短,业务处理完即断开连接,无需每次循环对每个socket判断情况。 ```cpp // 2. 等待并接受连接请求 while (1) { if (m_stop) { cout << "应用程序即将退出..." << endl; break; } TcpSocket* socket = m_server.acceptConn(3); tcpCon* pTcp = new tcpCon; pTcp->server = this; pTcp->client = socket; if (socket == NULL) { cout << "accept 超时或失败" << endl; continue; } cout << "客户端成功连接服务器..." << endl; // 加入任务的队列 threadpool_add(thp, wroking,(void*)(pTcp)); } //线程池销毁 threadpool_destroy(thp); ``` 3. **一些代码的简化和改进** 对其中一部分代码进行了简化和改进,比如: - 修改了生成随机字符串的函数 - 增加了读取数据库类的功能,能够读取日期等 - 改变了一些类的封装 - 对一些函数进行了传输判断,并且对函数返回值进行了些修改 ```cpp //原生成随机字符串的函数 // char randBuf[64]; , 参数 64, randBuf void ClientOperation::getRandString(int len, char * randBuf) { int flag = -1; // 设置随机种子 srand(time(NULL)); // 随机字符串: A-Z, a-z, 0-9, 特殊字符(!@#$%^&*()_+=) char chars[] = "!@#$%^&*()_+="; for (int i = 0; i < len-1; ++i) { flag = rand() % 4; switch (flag) { case 0: randBuf[i] = rand() % 26 + 'A'; break; case 1: randBuf[i] = rand() % 26 + 'a'; break; case 2: randBuf[i] = rand() % 10 + '0'; break; case 3: randBuf[i] = chars[rand() % strlen(chars)]; break; default: break; } } randBuf[len - 1] = '\0'; } //修改以后生成随机字符串对的函数 void ClientOperation::getRandString(int len, char * randBuf) { int flag = -1; // 设置随机种子 srand(time(NULL)); // 随机字符串: A-Z, a-z, 0-9, 特殊字符(!@#$%^&*()_+=) for (int i = 0; i < len - 1; ++i) { char tmp; while ((tmp = rand() % 128) < 32); randBuf[i] = tmp; } randBuf[len - 1] = '\0'; } ``` ## 四、项目总结 ​ 该项目是一个比较全面性的项目,通过该项目的练习对客户端服务端通信业务流程有了进一步的认知,项目也有更进一步的优化空间,比如更加全面运用智能指针优化代码,客户端管理界面更加精美等。