[0022] (15)接收端合并接收到的所有Fi,获得数据文件。
[0023] 进一步地,所述步骤(11)中的机密算法E采用如下的链式异或法:
[0024] (11.1)将Bi分成多个长度为L的块,设共有S块;
[0025] (11.2)设Bi分成的S块为A1,A2,……,AS,链式异或的计算过程如下:
[0026] C1=A1⊕Ki
[0027] Cj=Cj-1⊕Aj⊕Ki,2≤j≤S;
[0028] (11.3)链式异或的结果Ei={C1,,C2,……,CS}。
[0029] 进一步地,所述步骤(12)中的解密过程如下:
[0030] (12.1)将需要解密的Ei分成S个长度为L的块,即C1,,C2,……,CS;
[0031] (12.2)按照下述公式进行链式异或解密:
[0032] A1=C1⊕Ki
[0033] Aj=Cj⊕Cj-1⊕Ki,2≤j≤S
[0034] (12.3)链式异或解密结果Bi={A1,A2,……,AS}。
[0035] 进一步地,使用的哈希算法都是MD5算法。
[0036] 进一步地,所述文件信息包括文件名和文件长度。
[0037] 进一步地,P和K的长度都为1024位。
[0038] 本发明的有益效果包括:在不影响数据文件传输效率的情况下,大大加强了传输的安全性。【附图说明】
[0039] 此处所说明的附图是用来提供对本发明的进一步理解,构成本申请的一部分,但并不构成对本发明的不当限定,在附图中:
[0040] 图1是本发明方法所应用的系统结构图。【具体实施方式】
[0041] 下面将结合附图以及具体实施例来详细说明本发明,其中的示意性实施例以及说明仅用来解释本发明,但并不作为对本发明的限定。
[0042] 参见附图1,本发明涉及两点之间的数据文件传输,分别包括发送端和接收端,两者之间通过网络连接,目的是通过该网络将数据文件从发送端传输到接收端。本发明的数据文件传输方法的第一个考虑是安全性,因而文件在传输过程中应当是加密的,并且,为了具有普适性,本发明的发送端和接收端可以在无需事先协商的情况下,完成数据文件的加密传输;第二个考虑是传输的效率,但是加密传输一般会降低传输的效率,因而本发明采用了一个简单有效地加密方法,在保证足够加密强度的基础上,对传输效率的影响很小;第三个考虑是传输的可靠性和容错性,本发明通过将文件分块传输,使得即使少数文件块在传输过程中损坏,也可以进行文件块重传,不会对整个传输带来太大的影响;第四个考虑文件的完整性,本发明通过对文件块的哈希值校验来解决完整性问题。并且,本发明的数据文件传输方法有机地将上述四个考虑方面结合在一起,较为完善地解决了数据文件传输问题。
[0043] 下面对本发明的方法流程进行详细地说明:
[0044] (1)发送端与接收端建立连接后,发送端生成一个随机数a,并且计算初始加密密钥K=ga mod P,同时接收端也生成一个随机数b,并计算Y=gb mod P。
[0045] 其中,P是一个大素数,g是P的一个本原元,为了安全考虑,P的长度应该足够大,优选地,P的长度为1024位,则K的长度也为1024位(如果不足1024位,则在前端补零至1024位)[0046] (2)接收端将Y发送给发送端,发送端计算X=Ya mod P,并将X发送给接收端。
[0047] (3)接收端计算
[0048] 由上述步骤容易推导出,步骤(3)接收端获得的K’就等于K,因此通过上述步骤,发送端和接收端共同拥有了初始加密密钥K,由于整个过程中K都没有在网络上传输,因此即使有黑客监听了整个过程,也只能获得X和Y两个值,由于离散对数计算的困难性,该黑客实质上无法在可接受的时间内,基于X和Y的值计算获得K,因而K获得了足够的保密性和安全性。
[0049] (4)发送端将待传输的数据文件分块,每块的长度都是K的长度的m倍,m为整数,最后一块的长度如果不足,则通过在块最后增加随机数来补足长度。设该数据文件被分成N块,记为F1,F2,……,FN。
[0050] 例如,K的长度为1024位,m=10,则将该数据文件以10240位的长度分块,如果最后一块不足10240位,则在最后一块的后面增加随机数,补足至10240位。
[0051] 数据文件分块的目的,是为了分块传输,从而将损坏的风险分散,即使传输过程中发生错误,也只需要重传出错的块,而无需重传整个文件。
[0052] (5)发送端组装一个文件信息包={File,N,mL}。其中File是待传输数据文件的文件信息,包括文件名,文件长度等,N是数据文件被分块的块数,L是K的长度,mL就是每个分块的长度。
[0053] (6)发送端计算数据文件的第一个分块的哈希值Hash(F1),设哈希值的长度为h,则在哈希值后补上长度为L-h的随机数R1,获得新的长度为L的密钥K1。
[0054] Hash是本发明采用的哈希算法,优选地,本发明采用MD5的哈希算法,MD5的结果是128位,K的长度为1024位,则需要生成一个1024-128=896位的随机数,补在MD5哈希值后面,构成新的1024位的密钥K1,由于新密钥中不仅有随机数,还包括哈希值,进一步增强了密钥的随机性,该新密钥在后面用于对第一个文件包的加密。
[0055] (7)设文件信息包的长度为L0,则将文件信息包与K的前L0位进行异或,得到异或结果XF。然后发送端组装一个初始信息包={K1⊕K,XF,HF},将该初始信息包括发送给接收端。其中HF是文件信息包和K1的哈希值,用于后续的校验。
[0056] (8)接收端使用K解密该初始信息包,获得K1和文件信息包,并使用HF进行哈希校验,如果校验不通过,则请求发送端重发该初始信息包直到校验通过,如果校验通过,则接收端告知发送端已准备好接收数据文件。
[0057] 由于接收端在步骤(3)中已经获得了密钥K,因此可以通过与初始信息包进行异或,解密出K1和文件信息包。哈希校验保证了初始信息包是正确的。另外,由于K1中包括了Hash(F1),因而接收端同时还获得了第一个分块的哈希值。
[0058] (9)发送端设置循环变量i=1。
[0059] (10)发送端组装第i个文件包Bi,如果i
[0060] 其中,Ri+1是一个长度为L-h的随机数,则Ri+1的长度与Hash(Fi+1)的长度之和为L,也就是说,Ki+1的长度为L,作为下个文件包的加密密钥。
[0061] (11)发送端使用密钥Ki加密第i个文件包,即计算Ei=E(Ki,Bi)。
[0062] 本发明提出了一种新的加密算法E,即链式异或法,该方法在后面做详细介绍。
[0063] (12)发送端将Ei和Hash(Bi)发送给接收端,接收端对Ei解密,获得Bi(具体的解密方法也在后面介绍)。如果i
[0064] (13)接收端使用Hash(Bi)对Bi进行哈希值校验,同时使用Hash(Fi)对Fi进行哈希值校验,通过双重哈希值校验对第i个文件包的完整性进行确认,如果有一个校验没通过,则接收端请求发送端重新发送直至校验通过。
[0065] 从上述步骤可以看出,Hash(Bi)是从本次发送中获得的,而Hash(Fi)是从上一个文件包中获得的,双重的不同来源的哈希校验给黑客攻击增加了难度。
[0066] (14)如果i
[0067] (15)接收端合并接收到的所有Fi,获得数据文件。
[0068] 如果最后一个FN被添加了随机数,由于文件信息包中有数据文件的长度,因而接收端可以通过该长度获知最后一部分哪些是被添加的随机数,因而可以去除该随机数。
[0069] 本发明对于每个文件包,使用的都是不同的密钥Ki,这实际上起到了一次一密的效果,大大增强了数据文件传输的安全性。而对于步骤(11)中的加密算法,本发明使用了一种简单有效的链式异或法,具体说明如下:
[0070] (11.1)将Bi分成多个长度为L的块,设共有S块。
[0071] 当i
[0072] (11.2)设Bi分成的S块为A1,A2,……,AS,链式异或的计算过程如下:
[0073] C1=A1⊕Ki
[0074] Cj=Cj-1⊕Aj⊕Ki,2≤j≤S;
[0075] (11.3)链式异或的结果Ei={C1,,C2,……,CS}。
[0076] 本发明提出的链式异或法其使用的计算只有异或,没有复杂的计算,因此整个计算过程的效率是非常高的,对数据文件的传输效率不会有太大影响。
[0077] 链式异或的解密也非常简单,具体如下:
[0078] (12.1)将需要解密的Ei分成S个长度为L的块,即C1,,C2,……,CS。
[0079] (12.2)按照下述公式进行链式异或解密:
[0080] A1=C1⊕Ki
[0081] Aj=Cj⊕Cj-1⊕Ki,2≤j≤S
[0082] 上述链式异或解密的过程实际上可以并行计算。
[0083] (12.3)链式异或解密结果Bi={A1,A2,……,AS}。
[0084] 以上所述仅是本发明的较佳实施方式,故凡依本发明专利申请范围所述的构造、特征及原理所做的等效变化或修饰,均包括于本发明专利申请范围内。