本發(fā)明屬于計(jì)算機(jī)和網(wǎng)絡(luò)領(lǐng)域,涉及網(wǎng)絡(luò)上的數(shù)據(jù)傳輸,尤其涉及一種數(shù)據(jù)文件的傳輸方法。
背景技術(shù):
近年來(lái),隨著計(jì)算機(jī)和網(wǎng)絡(luò)的普及,個(gè)人用戶之間、企業(yè)之間的信息交流大量地轉(zhuǎn)移到互聯(lián)網(wǎng)上進(jìn)行,通過(guò)互聯(lián)網(wǎng)完成雙方的數(shù)據(jù)交換。一個(gè)典型的需求是在互聯(lián)網(wǎng)的兩方之間傳輸某個(gè)數(shù)據(jù)文件,例如word文檔、PDF文檔等等。
現(xiàn)有技術(shù)中,網(wǎng)絡(luò)上數(shù)據(jù)文件的傳輸有多種方法,直接的文件傳輸方法例如有FTP文件傳輸協(xié)議、SCP安全拷貝等等,間接的數(shù)據(jù)文件傳輸方法例如可以通過(guò)電子郵件傳輸、網(wǎng)盤(pán)轉(zhuǎn)存等等。但是,現(xiàn)有的文件傳輸方法或者過(guò)于復(fù)雜,文件傳輸效率低,或者需要借助別的網(wǎng)絡(luò)工具或網(wǎng)絡(luò)服務(wù),或者安全性不足。
對(duì)于現(xiàn)有技術(shù)的上述缺點(diǎn),還沒(méi)有一種完善的解決方案。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中的上述問(wèn)題,本發(fā)明提出了一種數(shù)據(jù)文件的傳輸方法。
本發(fā)明采用的技術(shù)方案如下:
一種數(shù)據(jù)文件的傳輸方法,該方法包括如下步驟:
(1)發(fā)送端與接收端建立連接后,發(fā)送端生成一個(gè)隨機(jī)數(shù)a,并且計(jì)算初始加密密鑰K=ga mod P,同時(shí)接收端也生成一個(gè)隨機(jī)數(shù)b,并計(jì)算Y=gb mod P。其中,P為素?cái)?shù),g是P的一個(gè)本原元,K的長(zhǎng)度為L(zhǎng);
(2)接收端將Y發(fā)送給發(fā)送端,發(fā)送端計(jì)算X=Y(jié)amod P,并將X發(fā)送給接收端;
(3)接收端計(jì)算該K’=K;
(4)發(fā)送端將待傳輸?shù)臄?shù)據(jù)文件分為N塊,記為F1,F(xiàn)2,……,F(xiàn)N,每塊的長(zhǎng)度為mL,m為整數(shù),最后一塊的長(zhǎng)度如果不足,則通過(guò)在塊最后增加隨機(jī)數(shù)來(lái)補(bǔ)足長(zhǎng)度;
(5)發(fā)送端組裝一個(gè)文件信息包={File,N,mL}。其中File是待傳輸數(shù)據(jù)文件的文件信息;
(6)發(fā)送端計(jì)算該數(shù)據(jù)文件的第一個(gè)分塊的哈希值Hash(F1),設(shè)哈希值的長(zhǎng)度為h,則在哈希值后補(bǔ)上長(zhǎng)度為L(zhǎng)-h的隨機(jī)數(shù)R1,獲得新的長(zhǎng)度為L(zhǎng)的密鑰K1;其中Hash是一個(gè)哈希算法;
(7)設(shè)文件信息包的長(zhǎng)度為L(zhǎng)0,則將文件信息包與K的前L0位進(jìn)行異或,得到異或結(jié)果XF;然后發(fā)送端組裝一個(gè)初始信息包={K1⊕K,XF,HF},將該初始信息包括發(fā)送給接收端。其中HF是文件信息包和K1的哈希值;
(8)接收端使用K解密該初始信息包,獲得K1和文件信息包,并使用HF進(jìn)行哈希校驗(yàn),如果校驗(yàn)不通過(guò),則請(qǐng)求發(fā)送端重發(fā)該初始信息包直到校驗(yàn)通過(guò),如果校驗(yàn)通過(guò),則接收端告知發(fā)送端已準(zhǔn)備好接收該數(shù)據(jù)文件;
(9)發(fā)送端設(shè)置循環(huán)變量i=1;
(10)發(fā)送端組裝第i個(gè)文件包Bi,如果i<N,則令Bi={Fi,Ki+1},Ki+1={Hash(Fi+1),Ri+1},如果i=N,則Bi=Fi;其中Ri+1是一個(gè)長(zhǎng)度為L(zhǎng)-h隨機(jī)數(shù);
(11)發(fā)送端使用密鑰Ki加密第i個(gè)文件包,即計(jì)算Ei=E(Ki,Bi),其中E是加密算法;
(12)發(fā)送端將Ei和Hash(Bi)發(fā)送給接收端,接收端對(duì)Ei解密,獲得Bi;如果i<N,則接收端就從Bi中獲得Fi和Ki+1,從Ki+1中獲得Hash(Fi+1);如果i=N,則接收端只獲得Fi;
(13)接收端使用Hash(Bi)對(duì)Bi進(jìn)行哈希值校驗(yàn),同時(shí)使用Hash(Fi)對(duì)Fi進(jìn)行哈希值校驗(yàn),如果有一個(gè)校驗(yàn)沒(méi)通過(guò),則接收端請(qǐng)求發(fā)送端重新發(fā)送直至校驗(yàn)通過(guò);
(14)如果i<N,則令i增加1,并返回步驟(10),否則繼續(xù)下述步驟;
(15)接收端合并接收到的所有Fi,獲得數(shù)據(jù)文件。
進(jìn)一步地,所述步驟(11)中的機(jī)密算法E采用如下的鏈?zhǔn)疆惢蚍ǎ?/p>
(11.1)將Bi分成多個(gè)長(zhǎng)度為L(zhǎng)的塊,設(shè)共有S塊;
(11.2)設(shè)Bi分成的S塊為A1,A2,……,AS,鏈?zhǔn)疆惢虻挠?jì)算過(guò)程如下:
C1=A1⊕Ki
Cj=Cj-1⊕Aj⊕Ki,2≤j≤S;
(11.3)鏈?zhǔn)疆惢虻慕Y(jié)果Ei={C1,,C2,……,CS}。
進(jìn)一步地,所述步驟(12)中的解密過(guò)程如下:
(12.1)將需要解密的Ei分成S個(gè)長(zhǎng)度為L(zhǎng)的塊,即C1,,C2,……,CS;
(12.2)按照下述公式進(jìn)行鏈?zhǔn)疆惢蚪饷埽?/p>
A1=C1⊕Ki
Aj=Cj⊕Cj-1⊕Ki,2≤j≤S
(12.3)鏈?zhǔn)疆惢蚪饷芙Y(jié)果Bi={A1,A2,……,AS}。
進(jìn)一步地,使用的哈希算法都是MD5算法。
進(jìn)一步地,所述文件信息包括文件名和文件長(zhǎng)度。
進(jìn)一步地,P和K的長(zhǎng)度都為1024位。
本發(fā)明的有益效果包括:在不影響數(shù)據(jù)文件傳輸效率的情況下,大大加強(qiáng)了傳輸?shù)陌踩浴?/p>
【附圖說(shuō)明】
此處所說(shuō)明的附圖是用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,但并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定,在附圖中:
圖1是本發(fā)明方法所應(yīng)用的系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
下面將結(jié)合附圖以及具體實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明,其中的示意性實(shí)施例以及說(shuō)明僅用來(lái)解釋本發(fā)明,但并不作為對(duì)本發(fā)明的限定。
參見(jiàn)附圖1,本發(fā)明涉及兩點(diǎn)之間的數(shù)據(jù)文件傳輸,分別包括發(fā)送端和接收端,兩者之間通過(guò)網(wǎng)絡(luò)連接,目的是通過(guò)該網(wǎng)絡(luò)將數(shù)據(jù)文件從發(fā)送端傳輸?shù)浇邮斩恕1景l(fā)明的數(shù)據(jù)文件傳輸方法的第一個(gè)考慮是安全性,因而文件在傳輸過(guò)程中應(yīng)當(dāng)是加密的,并且,為了具有普適性,本發(fā)明的發(fā)送端和接收端可以在無(wú)需事先協(xié)商的情況下,完成數(shù)據(jù)文件的加密傳輸;第二個(gè)考慮是傳輸?shù)男?,但是加密傳輸一般?huì)降低傳輸?shù)男?,因而本發(fā)明采用了一個(gè)簡(jiǎn)單有效地加密方法,在保證足夠加密強(qiáng)度的基礎(chǔ)上,對(duì)傳輸效率的影響很??;第三個(gè)考慮是傳輸?shù)目煽啃院腿蒎e(cuò)性,本發(fā)明通過(guò)將文件分塊傳輸,使得即使少數(shù)文件塊在傳輸過(guò)程中損壞,也可以進(jìn)行文件塊重傳,不會(huì)對(duì)整個(gè)傳輸帶來(lái)太大的影響;第四個(gè)考慮文件的完整性,本發(fā)明通過(guò)對(duì)文件塊的哈希值校驗(yàn)來(lái)解決完整性問(wèn)題。并且,本發(fā)明的數(shù)據(jù)文件傳輸方法有機(jī)地將上述四個(gè)考慮方面結(jié)合在一起,較為完善地解決了數(shù)據(jù)文件傳輸問(wèn)題。
下面對(duì)本發(fā)明的方法流程進(jìn)行詳細(xì)地說(shuō)明:
(1)發(fā)送端與接收端建立連接后,發(fā)送端生成一個(gè)隨機(jī)數(shù)a,并且計(jì)算初始加密密鑰K=ga mod P,同時(shí)接收端也生成一個(gè)隨機(jī)數(shù)b,并計(jì)算Y=gb mod P。
其中,P是一個(gè)大素?cái)?shù),g是P的一個(gè)本原元,為了安全考慮,P的長(zhǎng)度應(yīng)該足夠大,優(yōu)選地,P的長(zhǎng)度為1024位,則K的長(zhǎng)度也為1024位(如果不足1024位,則在前端補(bǔ)零至1024位)
(2)接收端將Y發(fā)送給發(fā)送端,發(fā)送端計(jì)算X=Y(jié)a mod P,并將X發(fā)送給接收端。
(3)接收端計(jì)算
由上述步驟容易推導(dǎo)出,步驟(3)接收端獲得的K’就等于K,因此通過(guò)上述步驟,發(fā)送端和接收端共同擁有了初始加密密鑰K,由于整個(gè)過(guò)程中K都沒(méi)有在網(wǎng)絡(luò)上傳輸,因此即使有黑客監(jiān)聽(tīng)了整個(gè)過(guò)程,也只能獲得X和Y兩個(gè)值,由于離散對(duì)數(shù)計(jì)算的困難性,該黑客實(shí)質(zhì)上無(wú)法在可接受的時(shí)間內(nèi),基于X和Y的值計(jì)算獲得K,因而K獲得了足夠的保密性和安全性。
(4)發(fā)送端將待傳輸?shù)臄?shù)據(jù)文件分塊,每塊的長(zhǎng)度都是K的長(zhǎng)度的m倍,m為整數(shù),最后一塊的長(zhǎng)度如果不足,則通過(guò)在塊最后增加隨機(jī)數(shù)來(lái)補(bǔ)足長(zhǎng)度。設(shè)該數(shù)據(jù)文件被分成N塊,記為F1,F(xiàn)2,……,F(xiàn)N。
例如,K的長(zhǎng)度為1024位,m=10,則將該數(shù)據(jù)文件以10240位的長(zhǎng)度分塊,如果最后一塊不足10240位,則在最后一塊的后面增加隨機(jī)數(shù),補(bǔ)足至10240位。
數(shù)據(jù)文件分塊的目的,是為了分塊傳輸,從而將損壞的風(fēng)險(xiǎn)分散,即使傳輸過(guò)程中發(fā)生錯(cuò)誤,也只需要重傳出錯(cuò)的塊,而無(wú)需重傳整個(gè)文件。
(5)發(fā)送端組裝一個(gè)文件信息包={File,N,mL}。其中File是待傳輸數(shù)據(jù)文件的文件信息,包括文件名,文件長(zhǎng)度等,N是數(shù)據(jù)文件被分塊的塊數(shù),L是K的長(zhǎng)度,mL就是每個(gè)分塊的長(zhǎng)度。
(6)發(fā)送端計(jì)算數(shù)據(jù)文件的第一個(gè)分塊的哈希值Hash(F1),設(shè)哈希值的長(zhǎng)度為h,則在哈希值后補(bǔ)上長(zhǎng)度為L(zhǎng)-h的隨機(jī)數(shù)R1,獲得新的長(zhǎng)度為L(zhǎng)的密鑰K1。
Hash是本發(fā)明采用的哈希算法,優(yōu)選地,本發(fā)明采用MD5的哈希算法,MD5的結(jié)果是128位,K的長(zhǎng)度為1024位,則需要生成一個(gè)1024-128=896位的隨機(jī)數(shù),補(bǔ)在MD5哈希值后面,構(gòu)成新的1024位的密鑰K1,由于新密鑰中不僅有隨機(jī)數(shù),還包括哈希值,進(jìn)一步增強(qiáng)了密鑰的隨機(jī)性,該新密鑰在后面用于對(duì)第一個(gè)文件包的加密。
(7)設(shè)文件信息包的長(zhǎng)度為L(zhǎng)0,則將文件信息包與K的前L0位進(jìn)行異或,得到異或結(jié)果XF。然后發(fā)送端組裝一個(gè)初始信息包={K1⊕K,XF,HF},將該初始信息包括發(fā)送給接收端。其中HF是文件信息包和K1的哈希值,用于后續(xù)的校驗(yàn)。
(8)接收端使用K解密該初始信息包,獲得K1和文件信息包,并使用HF進(jìn)行哈希校驗(yàn),如果校驗(yàn)不通過(guò),則請(qǐng)求發(fā)送端重發(fā)該初始信息包直到校驗(yàn)通過(guò),如果校驗(yàn)通過(guò),則接收端告知發(fā)送端已準(zhǔn)備好接收數(shù)據(jù)文件。
由于接收端在步驟(3)中已經(jīng)獲得了密鑰K,因此可以通過(guò)與初始信息包進(jìn)行異或,解密出K1和文件信息包。哈希校驗(yàn)保證了初始信息包是正確的。另外,由于K1中包括了Hash(F1),因而接收端同時(shí)還獲得了第一個(gè)分塊的哈希值。
(9)發(fā)送端設(shè)置循環(huán)變量i=1。
(10)發(fā)送端組裝第i個(gè)文件包Bi,如果i<N(即不是最后一個(gè)文件包),則令Bi={Fi,Ki+1},Ki+1={Hash(Fi+1),Ri+1},如果i=N,則Bi=Fi。
其中,Ri+1是一個(gè)長(zhǎng)度為L(zhǎng)-h的隨機(jī)數(shù),則Ri+1的長(zhǎng)度與Hash(Fi+1)的長(zhǎng)度之和為L(zhǎng),也就是說(shuō),Ki+1的長(zhǎng)度為L(zhǎng),作為下個(gè)文件包的加密密鑰。
(11)發(fā)送端使用密鑰Ki加密第i個(gè)文件包,即計(jì)算Ei=E(Ki,Bi)。
本發(fā)明提出了一種新的加密算法E,即鏈?zhǔn)疆惢蚍?,該方法在后面做詳?xì)介紹。
(12)發(fā)送端將Ei和Hash(Bi)發(fā)送給接收端,接收端對(duì)Ei解密,獲得Bi(具體的解密方法也在后面介紹)。如果i<N,則接收端就從Bi中獲得Fi和Ki+1,從Ki+1中獲得Hash(Fi+1)。如果i=N,則接收端只獲得Fi。
(13)接收端使用Hash(Bi)對(duì)Bi進(jìn)行哈希值校驗(yàn),同時(shí)使用Hash(Fi)對(duì)Fi進(jìn)行哈希值校驗(yàn),通過(guò)雙重哈希值校驗(yàn)對(duì)第i個(gè)文件包的完整性進(jìn)行確認(rèn),如果有一個(gè)校驗(yàn)沒(méi)通過(guò),則接收端請(qǐng)求發(fā)送端重新發(fā)送直至校驗(yàn)通過(guò)。
從上述步驟可以看出,Hash(Bi)是從本次發(fā)送中獲得的,而Hash(Fi)是從上一個(gè)文件包中獲得的,雙重的不同來(lái)源的哈希校驗(yàn)給黑客攻擊增加了難度。
(14)如果i<N,則令i增加1,并返回步驟(10),否則繼續(xù)下述步驟。
(15)接收端合并接收到的所有Fi,獲得數(shù)據(jù)文件。
如果最后一個(gè)FN被添加了隨機(jī)數(shù),由于文件信息包中有數(shù)據(jù)文件的長(zhǎng)度,因而接收端可以通過(guò)該長(zhǎng)度獲知最后一部分哪些是被添加的隨機(jī)數(shù),因而可以去除該隨機(jī)數(shù)。
本發(fā)明對(duì)于每個(gè)文件包,使用的都是不同的密鑰Ki,這實(shí)際上起到了一次一密的效果,大大增強(qiáng)了數(shù)據(jù)文件傳輸?shù)陌踩?。而?duì)于步驟(11)中的加密算法,本發(fā)明使用了一種簡(jiǎn)單有效的鏈?zhǔn)疆惢蚍?,具體說(shuō)明如下:
(11.1)將Bi分成多個(gè)長(zhǎng)度為L(zhǎng)的塊,設(shè)共有S塊。
當(dāng)i<N時(shí),由于Bi包括Fi和Ki+1,其中Fi的長(zhǎng)度為mL,則S=m+1;當(dāng)i=N時(shí),S=m。
(11.2)設(shè)Bi分成的S塊為A1,A2,……,AS,鏈?zhǔn)疆惢虻挠?jì)算過(guò)程如下:
C1=A1⊕Ki
Cj=Cj-1⊕Aj⊕Ki,2≤j≤S;
(11.3)鏈?zhǔn)疆惢虻慕Y(jié)果Ei={C1,,C2,……,CS}。
本發(fā)明提出的鏈?zhǔn)疆惢蚍ㄆ涫褂玫挠?jì)算只有異或,沒(méi)有復(fù)雜的計(jì)算,因此整個(gè)計(jì)算過(guò)程的效率是非常高的,對(duì)數(shù)據(jù)文件的傳輸效率不會(huì)有太大影響。
鏈?zhǔn)疆惢虻慕饷芤卜浅:?jiǎn)單,具體如下:
(12.1)將需要解密的Ei分成S個(gè)長(zhǎng)度為L(zhǎng)的塊,即C1,,C2,……,CS。
(12.2)按照下述公式進(jìn)行鏈?zhǔn)疆惢蚪饷埽?/p>
A1=C1⊕Ki
Aj=Cj⊕Cj-1⊕Ki,2≤j≤S
上述鏈?zhǔn)疆惢蚪饷艿倪^(guò)程實(shí)際上可以并行計(jì)算。
(12.3)鏈?zhǔn)疆惢蚪饷芙Y(jié)果Bi={A1,A2,……,AS}。
以上所述僅是本發(fā)明的較佳實(shí)施方式,故凡依本發(fā)明專利申請(qǐng)范圍所述的構(gòu)造、特征及原理所做的等效變化或修飾,均包括于本發(fā)明專利申請(qǐng)范圍內(nèi)。