多端安全协议传输平台

项目简介

​ 在学习完c++,系统编程等基础内容以后,就在网上找了关于c++方面的项目,下面这个项目是练手项目之一,一个C/S模型的全栈项目,关于源代码和项目的简介网上不难找到,这里讲述一些我对该项目的理解,和对项目的改进、代码的优化。

​ 该项目名为多端安全协议传输平台,它主要是提供为其他通信或者服务提供第三方服务,即保证甲方通信的安全传输。

​ 该项目主要实现第三方传输平台客户端和服务端之间如何进行秘钥协商,以及第三方平台对数据信息的注册等。协商完的秘钥能够提供给甲方进行数据加密,甲方只需要一个外联接口就能够实现数据的加解密通信,并可以借助软件界面来注册网点、秘钥等信息。

在这里插入图片描述
在这里插入图片描述

总体流程:

1) 安装数据库,部署安全传输平台sql脚本方案

2) 密钥协商服务器器配置终端SecMngServerAdmin,添加网点信息,配置后台服务器启动参数

3) 启动密钥协商服务器(SecMngServer)后台服务程序

4) 启动密钥协商客户端程序(SecMngClinet),发起协商密钥

5) 第三方信息系统,通过外联接口(AppInterface),加解密

​ 因为觉得该项目具有普遍性,延伸性,因此将该项目作为c++的练手项目,其中大部分函数代码的封装自己都重写了一遍,并且项目的代码进行了一些优化改进,在此过程中,感觉对c语言如何封装成c++语言有了更深刻的认知,对高并发通信有了更深刻的了解,提升了自己的代码能力。

代码完善和优化

  1. 功能的完善

源代码的功能只实现了秘钥协商的功能,在此基础上我将秘钥校验、秘钥注销、秘钥查看三个基础功能进行了完善

// 秘钥校验
int secKeyCheck(RequestMsg* reqMsg, char** outData, int& outLen);
// 秘钥注销
int secKeyRevoke(RequestMsg* reqMsg, char** outData, int& outLen);
// 秘钥查看
int secKeyView(RequestMsg* reqMsg, char** outData, int& outLen);
  1. 高并发机制的优化

    源代码用的高并发机制是多线程并发,考虑到需要在线程里写业务,并且每个业务逻辑其实算是短连接,因此我觉得在这里改为线程池并发来优化并发的性能比较好,因为线程池能够减少线程创建和销毁的开销,在并发量变化比较大的情况下性能会比较好,不采用epoll是因为连接时间比较短,业务处理完即断开连接,无需每次循环对每个socket判断情况。

// 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);
  1. 一些代码的简化和改进

对其中一部分代码进行了简化和改进,比如修改了生成随机字符串的代码,改变了一些类的封装,对一些函数进行了传输判断,对函数返回值进行了些修改

//原生成随机字符串的函数
// 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';
}

项目总结

{
	char tmp;
	while ((tmp = rand() % 128) < 32);
	randBuf[i] = tmp;
}
randBuf[len - 1] = '\0';

}


## 项目总结

​	该项目是一个比较全面性的项目,通过该项目的练习对客户端服务端通信业务流程有了进一步的认知,项目也有更进一步的优化空间,比如更加全面运用智能指针优化代码,客户端管理界面更加精美等。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
APIJSON是一种专为API而生的JSON网络传输协议,以及基于这套协议实现的ORM库。 为 简单的增删改查、复杂的查询、简单的事务操作 提供了完全自动化的API。 能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。 适合中小型前后端分离的项目,尤其是 BaaS、Serverless、互联网创业项目和企业自用项目。APIJSON 4.2.0-4.5.0 更新内容大幅提升增、删、改等写操作的性能; 增强对聚合函数 @having 的支持; 增强对原始 SQL 片段 @raw 的支持; 增强对 SQL 数学表达式的支持; 优化存储过程的返回字段格式; 解决 bug、增强安全、完善文档 等;通过自动化API,前端可以定制任何数据、任何结构! 大部分HTTP请求后端再也不用写接口了,更不用写文档了! 前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了! 后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了!APIJSON特点功能1、在线解析 自动生成接口文档,清晰可读永远最新 自动校验与格式化,支持高亮和收展 自动生成各种语言代码,一键下载 自动管理与测试接口用例,一键共享 自动给请求JSON加注释,一键切换 2、对于前端 不用再向后端催接口、求文档 数据和结构完全定制,要啥有啥 看请求知结果,所求即所得 可一次获取任何数据、任何结构 能去除重复数据,节省流量提高速度 3、对于后端 提供通用接口,大部分API不用再写 自动生成文档,不用再编写和维护 自动校验权限、自动管理版本、自动防SQL注入 开放API无需划分版本,始终保持兼容 支持增删改查、模糊搜索、正则匹配、远程函数等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值