一种数据传输方法、装置、设备及可读存储介质
技术领域
本申请涉及通信技术领域,更具体地说,涉及一种数据传输方法、装置、设备及可读存储介质。
背景技术
在现有技术中,若任意两端需要进行数据交互,可以建立套接字连接,从而通信双方通过套接字传输数据。但是在现有的通信方案中,基于套接字通信的两端都是明文传输,这样虽然可以简化通信双方的数据处理量,使得数据传输变得简捷方便,但传输过程中的数据安全性得不到保障。
其中,套接字即为socket,用于描述IP地址和端口,是一个通信链的句柄。通信双方可以通过“套接字”进行数据交互。
因此,如何提高数据在传输过程中的安全性,是本领域技术人员需要解决的问题。
发明内容
本申请的目的在于提供一种数据传输方法、装置、设备及可读存储介质,以提高数据在传输过程中的安全性。
为实现上述目的,本申请提供了如下技术方案:
第一方面,本申请提供了一种数据传输方法,包括:
当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;
通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。
优选地,通过套接字发送加密数据至接收端,包括:
按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端;预设的数据协议的组成部分至少包括:开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记。
优选地,若目标数据为消息,则按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端之前,还包括:
判断加密数据的字节长度是否超过预设的字节长度阈值;
若是,则按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端;
若否,则执行按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端的步骤。
优选地,通过套接字分别发送封装后的多个数据片段至接收端之后,还包括:
生成加密数据的拆包清单,并按照预设的数据协议封装拆包清单;
通过套接字发送封装后的拆包清单至接收端,以便接收端判断拆包清单中的数据片段个数与自身接收到的数据片段个数是否相同,若是,则按照每个数据片段在预设的数据协议中的编号拼接不同数据片段,得到加密数据。
优选地,若目标数据为文件,则将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据,包括:
从当前文件流位置开始读取预设长度的目标数据,得到文件片段;
将密钥作为对称加密算法的密钥,并利用对称加密算法加密文件片段,得到加密文件片段;
按照预设的数据协议封装加密文件片段,并通过套接字发送封装后的加密文件片段至接收端,以便接收端利用对称加密算法解密加密文件片段,并将解密得到的文件片段存储至缓存文件;
重复执行从当前文件流位置开始读取预设长度的目标数据,得到文件片段;将密钥作为对称加密算法的密钥,并利用对称加密算法加密文件片段,得到加密文件片段;按照预设的数据协议封装加密文件片段,并通过套接字发送封装后的加密文件片段至接收端,以便接收端利用对称加密算法解密加密文件片段,并将解密得到的文件片段存储至缓存文件的步骤,直至文件流结束位置;文件结束流位置后,所述接收端将缓存文件作为目标数据。
优选地,接收端将所述缓存文件作为所述目标数据之前,还包括:
计算目标数据的MD5值,并按照预设的数据协议封装MD5值;
通过套接字发送封装后的MD5值至接收端,以便接收端判断MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据。
优选地,从当前文件流位置开始读取预设长度的目标数据,得到文件片段之前,还包括:
向接收端发送获取目标数据的文件流位置的请求,并接收所述接收端返回的与请求对应的文件流位置;
将接收端返回的文件流位置作为当前文件流位置。
第二方面,本申请还提供了一种数据传输装置,包括:
密钥加密模块,用于当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
密钥发送模块,用于通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
数据加密模块,用于将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;
数据发送模块,用于通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。
优选地,数据发送模块具体用于:
按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端;预设的数据协议的组成部分至少包括:开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记。
优选地,数据发送模块包括:
判断单元,用于若目标数据为消息,则判断加密数据的字节长度是否超过预设的字节长度阈值;
拆包单元,用于当加密数据的字节长度超过预设的字节长度阈值,则按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端;
第一执行单元,用于执行数据发送模块执行的步骤。
优选地,数据发送模块还包括:
生成单元,用于生成加密数据的拆包清单,并按照预设的数据协议封装拆包清单;通过套接字发送封装后的拆包清单至接收端,以便接收端判断拆包清单中的数据片段个数与自身接收到的数据片段个数是否相同,若是,则按照每个数据片段在预设的数据协议中的编号拼接不同数据片段,得到加密数据。
优选地,若目标数据为文件,数据加密模块和数据发送模块包括:
读取单元,用于从当前文件流位置开始读取预设长度的目标数据,得到文件片段;
加密单元,用于将密钥作为对称加密算法的密钥,并利用对称加密算法加密文件片段,得到加密文件片段;
发送单元,用于按照预设的数据协议封装加密文件片段,并通过套接字发送封装后的加密文件片段至接收端,以便接收端利用对称加密算法解密加密文件片段,并将解密得到的文件片段存储至缓存文件;
第二执行单元,用于重复执行读取单元、加密单元和发送单元中的步骤,直至文件流结束位置;文件流结束位置后,接收端将缓存文件作为目标数据。
优选地,数据发送模块还包括:
计算单元,用于计算目标数据的MD5值,并按照预设的数据协议封装MD5值;
MD5值发送单元,用于通过套接字发送封装后的MD5值至接收端,以便接收端判断MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据。
优选地,数据发送模块还包括:
请求发送单元,用于向接收端发送获取目标数据的文件流位置的请求,并接收所述接收端返回的与请求对应的文件流位置;
确定单元,用于将接收端返回的文件流位置确定为当前文件流位置。
第三方面,本申请提供了一种数据传输设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现上述任意一项的数据传输方法的步骤。
第四方面,本申请提供了一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意一项的数据传输方法的步骤。
通过以上方案可知,本申请提供的一种数据传输方法,包括:当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。
可见,所述方法中的发送端和接收端基于套接字进行数据传输,其中发送端随机生成的密钥会利用非对称加密算法加密后发送至接收端;且传输的目标数据也会利用对称加密算法加密后发送至接收端,这样接收端便可利用对称加密算法解密加密数据后得到目标数据。也就是说,本申请中的通信双方基于套接字进行数据交互;首先利用非对称加密算法加密随机生成的密钥后发送至接收端,可保障密钥的安全性,且随机生成密钥实现了动态加密和解密;其次数据交互过程采用对称加密算法进行加密,不仅使数据在传输过程中得到了安全保障,对称密钥算法还降低了数据加密解密过程的复杂度。
相应地,本申请提供的一种数据传输装置、设备及可读存储介质,也同样具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例公开的第一种数据传输方法流程图;
图2为本申请实施例公开的第二种数据传输方法流程图;
图3为本申请实施例公开的第三种数据传输方法流程图;
图4为本申请实施例公开的一种数据协议模型结构示意图;
图5为本申请实施例公开的一种数据传输装置示意图;
图6为本申请实施例公开的一种数据传输设备示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,若任意两端需要进行数据交互,可以建立套接字连接,从而通信双方通过套接字传输数据。但是在现有的通信方案中,基于套接字通信的两端都是明文传输,这样虽然可以简化通信双方的数据处理量,使得数据传输变得简捷方便,但传输过程中的数据安全性得不到保障。为此,本申请提供了一种数据传输方法、装置、设备及可读存储介质,提高了数据在传输过程中的安全性。
参见图1,本申请实施例提供的第一种数据传输方法,包括:
S101、当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
需要说明的是,套接字具有较强的通用性,且可基于各种编程语言实现,例如C#等,故本方案的通用性也较高。
S102、通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
在本实施例中,利用非对称加密算法对随机生成的密钥进行加密的具体过程可参考现有技术,本实施例在此不再赘述。具体实施时,可预先将非对称加密算法封装为加密解密类,以供发送端和接收端调用。
本实施例中的通过套接字发送加密密钥至接收端,包括:按照预设的数据协议封装加密密钥,并通过套接字发送封装后的加密密钥至接收端。也就是说,密钥也按照预设的数据协议进行发送。
S103、将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;
其中,目标数据的类型至少包括消息和文件。
S104、通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。
在本实施例中,通过套接字发送加密数据至接收端,包括:按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端;预设的数据协议的组成部分至少包括:开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记。
具体的,该数据协议的组成部分中的开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记的长度分别为:字节、16字节、8字节、4字节、4字节、4字节、4字节、N字节和4字节;并且,开始标记为{#b},结尾标记为{#e},GUID(全局唯一标识符,Globally Unique Identifier)为标识符,由同一条数据拆分得到的不同数据片段具有同样的GUID。拆包状态是开关量,表示有没有拆包。编号是拆包后数据的顺序。内码是程序内置的各种协议数据类型。长度表示传输的数据内容的字节数,该长度为0表示没有传输数据。数据内容是协议的核心部分,它承载了要传输的信息,且是加密的。需要说明的是,加密数据在数据协议中会被转换为字节数组。数据协议中的内码可帮助接收端对接收到的数据进行处理。
该数据协议明确定义了各种字段,包括:开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记,并限定了它们的位置、长度,从结构上保证了协议的标准、统一和通用。可以理解的是,本实施例中的数据协议适用于数据分段传输,因此可提高数据传输过程中的完整性和安全性。
可见,本实施例提供了一种数据传输方法,所述方法中的发送端和接收端基于套接字进行数据传输,其中发送端随机生成的密钥会利用非对称加密算法加密后发送至接收端;且传输的目标数据也会利用对称加密算法加密后发送至接收端,这样接收端便可利用对称加密算法解密加密数据后得到目标数据。也就是说,本申请中的通信双方基于套接字进行数据交互;首先利用非对称加密算法加密随机生成的密钥后发送至接收端,可保障密钥的安全性,且随机生成密钥实现了动态加密和解密;其次数据交互过程采用对称加密算法进行加密,不仅使数据在传输过程中得到了安全保障,对称密钥算法还降低了数据加密解密过程的复杂度。
本申请实施例公开了第二种数据传输方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。
参见图2,本申请实施例提供的第二种数据传输方法,应用于发送端,包括:
S201、当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
S202、通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
S203、将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;
S204、若目标数据为消息,则判断加密数据的字节长度是否超过预设的字节长度阈值;若是,则执行S205;若否,则执行S208;
S205、按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端;
在本实施例中,目标数据的类型为消息。因此在传输加密数据时,可首先判断加密数据的字节长度是否超过预设的字节长度阈值;当超过时,则表明当前加密数据需要进行拆包处理,那么按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端。
具体的,字节长度阈值可设置为1024字节,那么若当前加密数据为2050字节,则当前加密数据可拆分为:1024字节、1024字节和2字节,得到三个数据片段。当然,字节长度阈值也可根据实际应用灵活调整。
S206、生成加密数据的拆包清单,并按照预设的数据协议封装拆包清单;
其中,拆包清单中的信息至少包括:内码、发送的数据片段个数和标识符。
S207、通过套接字发送封装后的拆包清单至接收端,以便接收端判断拆包清单中的数据片段个数与自身接收到的数据片段个数是否相同,若是,则按照每个数据片段在预设的数据协议中的编号拼接不同数据片段,得到加密数据,利用密钥解密加密数据,得到目标数据;
当“1024字节、1024字节和2字节”这三个数据片段均已发送至接收端,则发送端生成当前加密数据的拆包清单,并发送拆包清单至接收端。这样接收端便可以根据拆包清单中的标识符确定加密数据的拆包清单,并根据拆包清单中的数据片段个数确定自身是否完整接收到当前加密数据。
由一条加密数据拆分得到的每个数据片段的标识符相同,故即使加密数据被拆分为多个数据片段,每个数据片段也具有相同的标识符,因此根据拆包清单中的标识符可确定加密数据的拆包清单。
具体的,当接收端确定自身接收到完整的加密数据,则按照每个数据片段在预设的数据协议中的编号拼接不同数据片段,即可得到加密数据,进而利用先前已得到的密钥解密加密数据,得到目标数据。具体的,接收端拼接不同数据片段的操作即为粘包操作。
S208、按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端,以便接收端利用密钥解密加密数据,得到目标数据。
若判断加密数据的字节长度未超过预设的字节长度阈值,则直接按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端,以便接收端利用密钥解密加密数据,得到目标数据。
由于数据协议中的内码可帮助接收端对接收到的数据进行处理,且本实施例中的目标数据的类型为消息,故发送端发送消息至接收端的整个数据交互过程中,内码可分类为:密钥处理、数据处理、状态码处理和拆包清单处理。
其中,密钥处理的内码为Key,主要用于发送端和接收端的密钥交换过程,即:发送端按照S201和S202公开的方法将密钥发送至接收端,并存储至接收端后,接收端按照同样的方法将自身生成的密钥发送至发送端,并存储至发送端。
数据处理的内码为Data,主要用于接收端基于数据协议中的拆包状态判断当前接收到的消息是否被拆包;若拆包状态为开,则表明当前接收到的消息被拆包,则将接收到的数据添加至缓存队列,直至一条消息完整被接收。若拆包状态为关,则表明当前接收到的消息未被拆包,则直接解密处理即可。
状态码处理的内码为State Code,主要用于接收端将接收到数据转为整型后,返回相应的状态码;若未查询到相应的状态码,则返回状态码无法识别。
拆包清单处理的内码为Package Menu,主要用于接收端在接收到拆包清单后,根据拆包清单中的标识符读取自身接收到的数据片段,并根据拆包清单中的数据片段个数确定自身是否完整接收到当前加密数据,具体可参见S207。
本实施例中的其他实现步骤与上述实施例公开的内容雷同或类似,因此可对应参照上述实施例,故本实施例在此不再赘述。
可见,本实施例提供了另一种数据传输方法,所述方法中的发送端和接收端基于套接字进行数据传输,其中发送端随机生成的密钥会利用非对称加密算法加密后发送至接收端;且传输的目标数据也会利用对称加密算法加密后发送至接收端,这样接收端便可利用对称加密算法解密加密数据后得到目标数据。也就是说,本申请中的通信双方基于套接字进行数据交互;首先利用非对称加密算法加密随机生成的密钥后发送至接收端,可保障密钥的安全性,且随机生成密钥实现了动态加密和解密;其次数据交互过程采用对称加密算法进行加密,不仅使数据在传输过程中得到了安全保障,对称密钥算法还降低了数据加密解密过程的复杂度。
需要说明的是,若目标数据为消息,本实施例还能够基于加密数据的字节长度确定是否需要进行拆包;若需要,则按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端,实现了消息的拆包传输,从而避免了消息过大时传输效率降低的问题,也提高了消息传输过程中的完整性和安全性。
本申请实施例公开了第三种数据传输方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。
参见图3,本申请实施例提供的第三种数据传输方法,应用于发送端,包括:
S301、当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
S302、通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
S303、若目标数据为文件,则从当前文件流位置开始读取预设长度的目标数据,得到文件片段;
S304、将密钥作为对称加密算法的密钥,并利用对称加密算法加密文件片段,得到加密文件片段;
S305、按照预设的数据协议封装加密文件片段,并通过套接字发送封装后的加密文件片段至接收端,以便接收端利用对称加密算法解密加密文件片段,并将解密得到的文件片段存储至缓存文件;
S306、重复执行S303、S304和S305,直至文件流结束位置;
具体的,文件流结束位置后,所述接收端可以直接将缓存文件作为目标数据。当然还可以执行S307和S308,在验证接收到的文件的完整性后,再将缓存文件作为目标数据。
S307、计算目标数据的MD5值,并按照预设的数据协议封装MD5值;
S308、通过套接字发送封装后的MD5值至接收端,以便接收端判断MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据。
其中,MD5即为:密码散列函数5(Message-Digest Algorithm 5),其为计算机安全领域内广泛使用的一种散列函数。
需要说明的是,从当前文件流位置开始读取预设长度的目标数据,得到文件片段之前,还包括:向接收端发送获取目标数据的文件流位置的请求,并接收所述接收端返回的与请求对应的文件流位置;将接收端返回的文件流位置作为当前文件流位置。
在本实施例中,目标数据的类型为文件。由于文件较大,一般都需要分段传输,因此在传输文件时,需要按照文件流位置分片段传输文件。具体的,从当前文件流位置开始读取预设长度的目标数据,即可得到一个文件片段,将此文件片段按照预设的数据协议封装后,传输至接收端;若文件传输正常,则继续传输下一文件片段。
具体的,在传输目标数据之前,发送端会向接收端发送获取目标数据的文件流位置的请求,并接收所述接收端返回的与请求对应的文件流位置;进而将接收端返回的文件流位置作为当前文件流位置,此即实现了发送端和接收端的文件流位置同步。当文件传输中断后再恢复,则发送端会再次向接收端发送请求,当接收端接收到此请求,会向发送端返回传输中断时接收到的文件片段的文件流位置,那么发送端便可按照此文件流位置继续发送下一文件片段,即实现了文件的断点续传。
其中,为实现数据传输的统一性和通用性,预设长度可设置为1024字节。当然,该长度也可设置为其他长度。
当文件流至结束位置,则表明一个完整的文件传输完毕,那么计算目标数据的MD5值并发送至接收端,这样接收端就可以判断接收到的MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据,即得到了一个完整的文件。
由于数据协议中的内码可帮助接收端对接收到的数据进行处理,且本实施例中的目标数据的类型为文件,故发送端发送文件至接收端的交互过程中,内码可分类为:密钥处理、文件名处理、文件处理和结束信号处理。
其中,密钥处理的内码为Key,主要用于发送端和接收端的密钥交换过程,即:发送端按照S301和S302公开的方法将密钥发送至接收端,并存储至接收端后,接收端按照同样的方法将自身生成的密钥发送至发送端,并存储至发送端。
文件名处理的内码为File Name,主要用于接收端接收到文件片段后,提取其携带的文件名,判断缓存目录中是否存在与该文件名相同的缓存文件;若存在,则将接收到的文件片段存储至缓存文件,并读取该缓存文件,把流位置移动至尾部位置;若不存在,则以该文件名创建缓存文件。
文件处理的内码为File,主要用于接收端将接收到的文件片段存储于上述缓存文件。
结束信号处理的内码为Package Menu,主要用于接收端判断从发送端获得的MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据。
本实施例中的其他实现步骤与上述实施例公开的内容雷同或类似,因此可对应参照上述任意实施例,故本实施例在此不再赘述。
可见,本实施例提供了另一种数据传输方法,所述方法中的发送端和接收端基于套接字进行数据传输,其中发送端随机生成的密钥会利用非对称加密算法加密后发送至接收端;且传输的目标数据也会利用对称加密算法加密后发送至接收端,这样接收端便可利用对称加密算法解密加密数据后得到目标数据。也就是说,本申请中的通信双方基于套接字进行数据交互;首先利用非对称加密算法加密随机生成的密钥后发送至接收端,可保障密钥的安全性,且随机生成密钥实现了动态加密和解密;其次数据交互过程采用对称加密算法进行加密,不仅使数据在传输过程中得到了安全保障,对称密钥算法还降低了数据加密解密过程的复杂度。
需要说明的是,若目标数据为文件,本实施例还能够基于文件流位置分片段传输文件,实现了文件的分片段传输,从而保障了文件传输过程中的完整性和安全性;同时,文件流位置的同步实现了断点续传,从而可避免文件传输出错时重复传输,从而提高了文件传输效率。
基于上述任意实施例,需要说明的是,接收端返回数据至发送端的过程,与发送端发送数据至接收端的过程类似。
若发送端和接收端需要通过套接字通信,则首先需要初始化各种参数。初始化各种参数包括:判断发送端和接收端的套接字连接是否为空;若为空,则需要建立套接字连接。若不为空,则判断二者之间的套接字是否为连接状态;若是,则设置发送和接收的超时时间,设置套接字为阻止模式;判断二者是否交换了密钥;若没有,则二者交换密钥。
二者交换密钥的过程为:当发送端将自身密钥发送至接收端,并被接收端存储后,接收端可将自身密钥以相同方式反馈至发送端,具体为:发送端利用非对称加密算法加密随机生成的密钥,得到加密密钥,通过套接字发送加密密钥至接收端,以便发送端利用非对称加密算法解密加密密钥后存储密钥,至此发送端也得到了接收端的密钥,即二者完成了密钥交换。其中,在发送端和接收端的通信过程中,任意数据的传输均按照本申请公开的数据协议进行,数据协议模型可参见图4,图4为本申请实施例公开的一种数据协议模型结构示意图。
二者交换密钥后,发送端发送数据至接收端时,利用自身生成的密钥加密发送,然后接收端利用先前得到的发送端密钥进行解密,可得到原始数据;反之,接收端返回数据至发送端时,利用自身生成的密钥加密发送,然后发送端利用先前得到的接收端密钥进行解密,可得到原始数据。
需要说明的是,不管接收端是否接收到发送端发送的数据,接收端都会返回相应的状态码。例如:若接收端在规定时间内接收到数据,则返回数据已接收的状态码;若接收端在规定时间内未接收到数据,则返回数据接收超时的状态码。相应的,若发送端在规定时间内未发送完数据,则会返回数据发送超时的状态码。状态码可用于提示某一操作的操作状态或结果。
可见,发送端发送数据至接收端的过程和接收端返回数据至发送端的过程类似,为避免赘述,本说明书仅描述了发送端发送数据至接收端的过程,接收端返回数据至发送端的过程请参照本说明书中的任意实施例。需要说明的是,当接收端返回数据至发送端时,接收端则变更为发送端,发送端则变更为接收端。
下面对本申请实施例提供的一种数据传输装置进行介绍,下文描述的一种数据传输装置与上文描述的一种数据传输方法可以相互参照。
参见图5,本申请实施例提供的一种数据传输装置,包括:
密钥加密模块501,用于当建立与接收端的套接字连接,则利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;
密钥发送模块502,用于通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;
数据加密模块503,用于将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;
数据发送模块504,用于通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。
优选地,数据发送模块具体用于:
按照预设的数据协议封装加密数据,并通过套接字发送封装后的加密数据至接收端;预设的数据协议的组成部分至少包括:开始标记、标识符、时间、拆包状态、编号、内码、长度、数据内容和结尾标记。
优选地,数据发送模块包括:
判断单元,用于若目标数据为消息,则判断加密数据的字节长度是否超过预设的字节长度阈值;
拆包单元,用于当加密数据的字节长度超过预设的字节长度阈值,则按照字节长度阈值将加密数据拆分为多个数据片段;按照预设的数据协议分别封装多个数据片段,并通过套接字分别发送封装后的多个数据片段至接收端;
第一执行单元,用于执行数据发送模块执行的步骤。
优选地,数据发送模块还包括:
生成单元,用于生成加密数据的拆包清单,并按照预设的数据协议封装拆包清单;通过套接字发送封装后的拆包清单至接收端,以便接收端判断拆包清单中的数据片段个数与自身接收到的数据片段个数是否相同,若是,则按照每个数据片段在预设的数据协议中的编号拼接不同数据片段,得到加密数据。
优选地,若目标数据为文件,数据加密模块和数据发送模块包括:
读取单元,用于从当前文件流位置开始读取预设长度的目标数据,得到文件片段;
加密单元,用于将密钥作为对称加密算法的密钥,并利用对称加密算法加密文件片段,得到加密文件片段;
发送单元,用于按照预设的数据协议封装加密文件片段,并通过套接字发送封装后的加密文件片段至接收端,以便接收端利用对称加密算法解密加密文件片段,并将解密得到的文件片段存储至缓存文件;
第二执行单元,用于重复执行读取单元、加密单元和发送单元中的步骤,直至文件流结束位置。
优选地,数据发送模块还包括:
计算单元,用于当文件流结束位置,则计算目标数据的MD5值,并按照预设的数据协议封装MD5值;
MD5值发送单元,用于通过套接字发送封装后的MD5值至接收端,以便接收端判断MD5值与自身根据缓存文件计算得到的目标数据的MD5值是否相同,若是,则将缓存文件作为目标数据。
优选地,数据发送模块还包括:
请求发送单元,用于向接收端发送获取目标数据的文件流位置的请求,并接收所述接收端返回的与请求对应的文件流位置;
确定单元,用于将接收端返回的文件流位置确定为当前文件流位置。
可见,本实施例提供了一种数据传输装置,包括:密钥加密模块、密钥发送模块、数据加密模块以及数据发送模块。当建立与接收端的套接字连接,则首先由密钥加密模块利用非对称加密算法对随机生成的密钥进行加密,得到加密密钥;然后密钥发送模块通过套接字发送加密密钥至接收端,以便接收端利用非对称加密算法解密加密密钥后存储密钥;进而数据加密模块将密钥作为对称加密算法的密钥,并利用对称加密算法加密目标数据,得到加密数据;最后数据发送模块通过套接字发送加密数据至接收端,以便接收端利用对称加密算法解密加密数据,得到目标数据。如此各个模块之间分工合作,各司其职,从而提高了数据在传输过程中的安全性。
下面对本申请实施例提供的一种数据传输设备进行介绍,下文描述的一种数据传输设备与上文描述的一种数据传输方法及装置可以相互参照。
参见图6,本申请实施例提供的一种数据传输设备,包括:
存储器601,用于存储计算机程序;
处理器602,用于执行所述计算机程序时实现上述任意实施例所述的数据传输方法的步骤。
下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种数据传输方法、装置及设备可以相互参照。
一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意实施例所述的数据传输方法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。