一种安全高效的文件传输协议设计

  • Post author:
  • Post category:其他




介绍

随着3G、4G、5G的发展,使得文件传输变得轻而易举,我们可以随时随地地进行文件传输,与好友之间,与云服务器之间。文件的传输,意味着一个数据信息需要在网络上暴露,当受到恶意攻击时,导致数据泄露,造成一些不可磨灭的灾难。因此,文件的安全传输是一个值得探讨的问题。

1、加密技术,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已知的加密信息,但因不知解密的方法,仍然无法了解信息内容。进而使得数据可以在互联网上安全传输。

2、对称加密技术,采用单密钥密码系统的加密方法,同一个密钥进行加密解密,当加密者生成密钥对数据进行加密之后,如何把密钥安全的送到解密者手中,成为了一个至关重用的问题。

3、非对称加密技术,非对称加密需要两个密钥,公钥和私钥。一般使用公钥加密,私钥解密。非对称加密效率较低,但非对称加密技术的出现为对称加密密钥的安全传输提供了保障。

4、TLS技术全称为安全传输层协议,TLS结合了对称加密技术和非对称加密技术,用于在两个通信程序之间提供数据包的保密性和数据的完整性。

本文将模拟TLS协议,建立一个安全文件传输系统。



设计

整个上传协议运行在 TCP 协议之上,采用非阻塞 I/O 模型(epoll 模型,Java 中称 NIO 模型),以保证单点服务器对大量并发的支撑,客户端直接也采用非阻塞 I/O 模 型。由于非对称加密解密效率较低,本方案未全采用非对称加密算法,而是采用将非对称加 密和对称加密结合的方式,第三方生成非对称加密密钥对将公钥传递到 A 端,A 端先通过 非对称加密将对称加密的密钥进行加密,B 通过非对称解密将对称密钥进行解密。双方都得 到对称加密密钥后,双方则可通过该密钥进行安全通信。



系统模块

客户端主要模块:登录模块,加密解密模块,传输模块,协商模块

服务端主要模块:网络支持模块,密钥分配模块,缓存模块,用户登录模块

1、登录模块

客户端和服务器端都含登录模块,客户端随机随机生成一个 6 位 ID,提交到服务器端, 并通过服务器的用户缓存模块对其进行缓存。

2、用户缓存模块

用户缓存模块主要记录各个用户的 ID 和起对应的秘钥。

3、秘钥分配模块

服务器端负责对客户端进行秘钥分配,通过 RSA 秘钥分配机制对其分配公钥或者私钥, 公钥分配给发送方,私钥分配给接收方。

4、秘钥协商模块

客户端登录到服务器之后,则可项目通信,发送方选择一种对称加密算法并并告知接收 方,接收方收到发送发传递过来的加密类型,自动适配对应的解密算法。并获取发送方 通过公钥加密的对称加密的秘钥,对其解密,得到解密后的对称加密秘钥。

5、加密解密模块

加密解密模块主要负责对数据进行加密和对对称加密秘钥进行加密,如秘钥协商模块协商好对应的加密算法之后,发送方通过对称加密秘钥对数据进行加密,接收方通过对称 加密秘钥对数据进行解密。

6、发送文件模块

发送问价模块主要负责读取文件,和存储文件,并发送加密后的数据文件。

在这里插入图片描述



系统工作流程

服务器发放非对称加密密钥给客户端,客户端之间通过非对称加密算法保证整个传输过程是

安全的,本系统中采用 RSA 的非对称加密算法,其具体流程为:

1、服务端生成一对密钥(公钥和私钥),私钥不公开,分别发送给 A 和 B,A 自己保留

公钥,B 保留私钥。

2、A 生成对称加密密钥 p,和所选的加密类型,并用刚刚收到的公钥对其进行加密。

3、B 收到 A 的加密数据后,用服务器传递过来的非对称加密的私钥进行解密,得到密钥

和加密类型。

4、B 端根据加密类型自动适配对应的加密算法

5、A 发送文件,用 p 进行加密

6、B 端接收文件,用 p 进行解密

在这里插入图片描述

在这里插入图片描述



系统设计(代码实现)



代码结构

1、客户端代码总体结构

在这里插入图片描述

2、服务端代码总体结构

在这里插入图片描述



具体实现

具体代码实现在我的Github下:

点击跳转



运行实例

1、启动服务器

在这里插入图片描述

2、启动两个客户端

3、选择需要发送的文件

在这里插入图片描述

4、输入对方ID、并选择加密算法

在这里插入图片描述

5、点击发送文件

6、对方接收,并验证文件是否完整



总结

本文描述了一种安全文件传输系统的设计,并且给出了其详流程和具体的代码的实现,最后给出了具体的程序运行实例。



版权声明:本文为qq_25956141原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。