## 一、前言
该项目是我在全面、系统地学习完Linux系统编程和网络编程后,在网上找的开源项目,也是我的练手项目之一。该项目是一个典型的C/S模型的全栈项目,涉及到**TCP/IP网络通信**、**多线程并发**、**OpenSSL数据的加解密**、**Protobuf序列化与反序列化**、**MySQL数据库**等众多知识点,因为觉得这个项目具有较强的综合性和可拓展性,因此将其作为我的Linux C++练手项目,项目从开始到完成一共经历了三个月时间,在这三个月里,我重写了该项目的全部源代码,对代码的可维护性以及程序的执行效率做出了改进和优化,并在源代码的基础上增加了更多的功能。在这段时间里,我每天都沉浸在项目相关知识点的学习中,虽然在做项目的过程中遇到了不少困难,但是最终也都一一解决了,遇到知识盲区就去学,遇到bug就去查,这在一定程度上也锻炼了我分析问题、解决问题的能力,该项目让我更加熟悉了Linux环境下C/C++的开发,让我对高并发通信有了更深刻的理解。项目完成后,无论是在Linux操作系统的使用方面、项目开发环境的部署方面还是C++本身的代码能力方面,我认为我都有了一个不小的进步。最后,也欢迎大家为此项目提出您宝贵的意见!
## 二、项目简介
根据我对该项目的理解,我将其命名为**SecureTransferPlatform(密钥协商安全传输平台)**,该项目是一款基础设施类项目,可以为各集团、企业的信息系统提供统一、标准的信息安全服务,以解决企业和企业之间或集团内部之间,数据的本地存储、网络传输、身份认证、数据完整性等安全问题。简而言之,就是为第三方信息系统**提供加密算法和密钥,解决密钥分发困难问题,保证第三方信息系统点到点的安全通信**。该项目不仅可面向具有高安全性和高性能需求的电子商务、电子政务领域应用,还可以应用于各种"云"中心、"云"节点中。
## 三、项目整体架构
![image-20210822195313781](README.assets/image-20210822195313781.png)
以上是这个项目的整体架构图,整体上分为五个部分,分别为第三方信息系统的客户端与服务端、密钥协商系统的客户端(SecMngClient)与服务端(SecMngServer)以及密钥协商服务器的配置终端。第三方信息系统是这个项目的服务对象,最终目的就是为其提供信息的安全传输功能。密钥协商服务器以及密钥协商客户端是项目的核心模块,这两个模块需要分别部署在第三方信息系统所在的两台主机上,通过密钥协商功能,在各自所在的主机上生成密钥,存储在共享内存中,并通过提供外联接口,对第三方信息传输系统的数据进行加解密操作。密钥协商服务器配置终端用来管理接入系统的网点应用,负责网点生命周期的管理,具备历史密钥管理、网点审批等功能。
## 四、项目部署方案
在这里我以两个网点之间的应用为例来说明项目的部署方案,假设现在第三方信息系统为某银行内部的信息管理系统,位于北京的总行需要和位于广州的分行进行数据通信,在通信时需要用到数据加解密服务,此时项目的部署流程为:
1. 在北京总行网点所在的硬件服务器上,部署该项目的外联接口(AppInterface)和密钥协商服务器程序(SecMngKeyServer)。
2. 在广州分行网点所在的硬件服务器上,部署该项目的外联接口(AppInterface)和密钥协商软件客户端程序(SecMngKeyClient),密钥协商软件客户端可部署在Windows平台或Linux平台。
3. 两个网点在进行通信之前,需首先使用密钥协商客户端对秘钥协商服务器进行秘钥协商,生成数据加密所需的密钥。
4. 位于北京和广州的网点应用通过调用外联接口(AppInterface)进行数据的加解密操作。
## 五、模块划分及功能介绍
该项目主要由四大基础模块组成,分别为基础组件部分、密钥协商服务器&&客户端、配置管理终端以及外联接口。基础组件部分针对各个功能模块的底层逻辑进行了封装,为业务模块提供了包括数据序列化、套接字通信、共享内存和数据库操作在内的基础功能。密钥协商服务器和客户端实现了主要的业务逻辑,用于解决密钥分发困难的问题,为数据的加解密操作提供密钥,具备密钥协商、密钥校验和密钥查看等功能。配置管理终端具备历史密钥管理、网点审批等功能,用于管理后台数据库,外联接口可以为第三方信息传输系统提供数据加解密操作,是第三方应用程序调用本项目加解密模块的主要途径。
1. 基础组件部分
- 数据序列化模块
该模块主要解决数据的跨平台传输问题,涉及到主机字节序和网络字节序的相互转换、字节对齐、序列化与反序列化等内容。原项目中使用了抽象语法标记**ASN.1**编写该模块,但是底层需封装较多的细节,编写代码的难度较高并且较为复杂,因此我在该项目中使用**Google Protobuf**技术进行了替代,protobuf可以让我们自己定义数据的结构,然后通过使用特殊编译器生成源代码的方式让我们对数据进行序列化和反序列化操作,操作简单并且效率较高,该模块的UML类图如下:
![](README.assets/编解码类图.jpg)
- 套接字通信模块
该模块对C++中原生**Socket API**进行了封装,提供了两个类,分别为**TcpSocket**和**TcpServer**。TcpSocket类基于TCP/IP协议实现了基础的通信功能,包括向指定IP和端口的进程建立连接、发送数据、接收数据、断开与进程的连接等,TcpServer类针对密钥协商服务器的业务逻辑,对TcpSocket类进行了更深层次的封装,实现了设置监听、等待客户端连接等功能,以下展示了这两个类的UML类图:
<img src="README.assets/TCP套接字类图.jpg" style="zoom: 100%;" />
- 共享内存操作模块
项目使用由System V版本的Unix引入的**共享内存**(shm)来实现进程间通信,之所以选用共享内存来实现进程间通信,是因为它的效率是最高的,相较于其他进程间通信方式(如管道、内存映射等),共享内存在实现时不依赖于文件描述符(fd),即不需要对磁盘文件进行操作,而是直接为两个需要通信的进程共同安排同一块物理内存,因此效率最高。项目中提供了三个与共享内存操作相关的类,分别为**BaseShm**、**SecKeyShm**和**ShmNodeInfo**。BaseShm对共享内存原生API进行了封装,实现了共享内存创建、关联、销毁等功能,SecKeyShm和ShmNodeInfo则是针对具体的业务逻辑衍生出来的类,并继承了BaseShm中的功能,UML类图如下:
![](README.assets/共享内存类图.jpg)
- 编解码模块
编解码模块是本项目最核心的部分,涉及到对称加密、非对称加密、哈希运算、数字签名和Base64编解码等诸多内容,由于内容繁多,因此我使用了**OpenSSL**安全套接字密码库来实现该模块的全部功能,OpenSSL是一个开源共享库,为我们提供了丰富的密码算法、常用的秘钥以及SSL协议。该模块主要主要由**AesCrypto**、**RsaCrypto**和**Hash**这三个类所组成,AesCrypto类实现了使用AES算法进行对称加密的功能,AES算法是目前最安全、效率最高的公开的对称加密算法,秘钥长度可以为16字节、24字节、32字节,该类对具体的实现细节进行了封装,在使用时仅需调用对应的类的方法即可。Ha
没有合适的资源?快使用搜索试试~ 我知道了~
密钥协商安全传输平台.zip
共347个文件
h:163个
cpp:52个
o:48个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 154 浏览量
2023-12-29
01:59:31
上传
评论
收藏 25.57MB ZIP 举报
温馨提示
密钥协商安全传输平台是一款基础设施类项目,可以为各集团、企业的信息系统提供统一、标准的信息安全服务,以解决第三方信息系统存在的数据的本地存储、网络传输、身份认证、数据完整性等安全问题。.zip
资源推荐
资源详情
资源评论
收起资源包目录
密钥协商安全传输平台.zip (347个子文件)
libprotobuf.so.19.0.0 9.47MB
libprotoc.so.19.0.0 6MB
libprotobuf-lite.so.19.0.0 1.32MB
libprotobuf.so.19 9.47MB
libprotoc.so.19 6MB
libprotobuf-lite.so.19 1.32MB
libprotoc.a 22.28MB
libprotobuf.a 21.17MB
libprotobuf-lite.a 2.53MB
libinterface.a 796KB
RequestMsg.pb.cc 22KB
RespondMsg.pb.cc 21KB
Person.pb.cc 20KB
RequestMsg.pb.cc 20KB
RequestMsg.pb.cc 20KB
RespondMsg.pb.cc 20KB
RespondMsg.pb.cc 20KB
Person.pb.cc 18KB
ClientOP.cpp 10KB
TcpSocket.cpp 9KB
TcpSocket.cpp 9KB
TcpSocket.cpp 9KB
TcpSocket.cpp 9KB
ServerOP.cpp 8KB
RsaCrypto.cpp 5KB
RsaCrypto.cpp 5KB
RsaCrypto.cpp 4KB
MySQLOP.cpp 4KB
SecKeyShm.cpp 3KB
SecKeyShm.cpp 3KB
SecKeyShm.cpp 3KB
SecKeyShm.cpp 3KB
Hash.cpp 3KB
Hash.cpp 3KB
Hash.cpp 3KB
MySQLOP.cpp 3KB
TcpServer.cpp 2KB
TcpServer.cpp 2KB
main.cpp 2KB
test.cpp 2KB
AesCrypto.cpp 2KB
AesCrypto.cpp 2KB
AesCrypto.cpp 2KB
AesCrypto.cpp 2KB
main.cpp 1KB
BaseShm.cpp 1KB
BaseShm.cpp 1KB
BaseShm.cpp 1KB
BaseShm.cpp 1KB
Interface.cpp 1KB
main.cpp 1KB
protobuf_array.cpp 1KB
protobuf_enum.cpp 1KB
RequestCodec.cpp 1KB
RequestCodec.cpp 1KB
RequestCodec.cpp 1KB
RespondCodec.cpp 1KB
RespondCodec.cpp 1KB
RespondCodec.cpp 1KB
protobuf_test.cpp 1KB
main.cpp 985B
RespondFactory.cpp 779B
RespondFactory.cpp 779B
RespondFactory.cpp 779B
main.cpp 772B
RequestFactory.cpp 752B
RequestFactory.cpp 752B
RequestFactory.cpp 752B
main.cpp 691B
main.cpp 402B
Crypto 43KB
descriptor.pb.h 501KB
type.pb.h 94KB
repeated_field.h 93KB
descriptor.h 88KB
wire_format_lite.h 81KB
extension_set.h 77KB
wrappers.pb.h 61KB
plugin.pb.h 59KB
message.h 57KB
coded_stream.h 56KB
api.pb.h 46KB
message_differencer.h 44KB
map.h 43KB
struct.pb.h 40KB
map_type_handler.h 39KB
strutil.h 38KB
generated_message_reflection.h 32KB
arena.h 30KB
map_field.h 30KB
map_entry_lite.h 29KB
parse_context.h 28KB
parser.h 27KB
text_format.h 27KB
message_lite.h 22KB
reflection.h 22KB
command_line_interface.h 19KB
descriptor_database.h 19KB
RequestMsg.pb.h 18KB
RequestMsg.pb.h 18KB
共 347 条
- 1
- 2
- 3
- 4
资源评论
- Ran_RRRR2024-01-05这个数据库密码是多少啊请问
马coder
- 粉丝: 1205
- 资源: 6602
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功