亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種文件校驗方法及系統(tǒng)與流程

文檔序號:12670208閱讀:262來源:國知局
一種文件校驗方法及系統(tǒng)與流程

本發(fā)明涉及數(shù)據(jù)處理技術領域,更具體地,涉及一種文件校驗方法及系統(tǒng)。



背景技術:

目前,對于Windows客戶端軟件發(fā)布時,會將很多文件一起打包到安裝包文件中,在用戶的電腦上安裝完軟件后,在其安裝目錄會存在有很多的文件,包括程序所使用的庫文件,包括圖片聲音等資源文件,包括配置文件等。為了保證程序的正常運行,保證用戶電腦安裝的文件都是最新及正確的,那么就需要在程序啟動的時候去校驗所有的文件。

現(xiàn)有技術解決上述文件完整性校驗的方法是利用MD5校驗算法來計算每個獨立文件的MD5值(MD5算法可以保證如果文件內(nèi)容一樣那么其MD5值也是一致的),對每個文件去計算其MD5值對于文件比較大的時候,其耗時會非常大,這樣當計算完所有文件后,會將所有文件的MD5結(jié)果發(fā)送到服務器來判斷文件的MD5是否和服務器正確的一致,如果一致則說明文件都是正確的完整的。

然而,上述現(xiàn)有技術在對于待校驗文件比較多,文件內(nèi)容比較大的時候,讀取整個文件計算其MD5值會比較耗時,那么程序啟動的時候就會比較慢。



技術實現(xiàn)要素:

本發(fā)明為克服上述問題或者至少部分地解決上述問題,提供一種文件校驗方法及系統(tǒng)。

根據(jù)本發(fā)明的一個方面,提供一種文件校驗方法,包括:

步驟1,當待校驗文件大小小于預設閾值時,計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值;

步驟2,基于預先配置的所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。

根據(jù)本發(fā)明的另一個方面,提供一種文件校驗系統(tǒng),包括:

MD5值生成模塊,與所述校驗模塊相連,用于當待校驗文件大小小于預設閾值時,計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值;

校驗模塊,與所述MD5值生成模塊相連,用于基于預先配置的所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。

本申請?zhí)岢鲆环N文件校驗方法及系統(tǒng),所述方法通過步驟1,當待校驗文件大小小于預設閾值時,計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值;步驟2,基于預先配置的所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。本發(fā)明通過以上步驟從而達到文件一致性的快速校驗,從而提升所述文件對應程序啟動時的速度;同時后臺進程的大文件全量MD5值計算與對比,同時有效的保證了文件校驗的準確性。

附圖說明

圖1為本發(fā)明具體實施例一種文件校驗方法的整體流程示意圖;

圖2為本發(fā)明具體實施例一種文件校驗系統(tǒng)的整體框架示意圖。

具體實施方式

下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。

現(xiàn)有技術解決上述文件完整性校驗的方法是利用MD5校驗算法來計算每個獨立文件的MD5值(MD5算法可以保證如果文件內(nèi)容一樣那么其MD5值也是一致的),對每個文件去計算其MD5值對于文件比較大的時候,其耗時會非常大,這樣當計算完所有文件后,會將所有文件的MD5結(jié)果發(fā)送到服務器來判斷文件的MD5是否和服務器正確的一致,如果一致則說明文件都是正確的完整的。

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現(xiàn)。將數(shù)據(jù)(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理。

然而,上述現(xiàn)有技術在對于待校驗文件比較多,文件內(nèi)容比較大的時候,讀取整個文件計算其MD5值會比較耗時,那么程序啟動的時候就會比較慢。

本申請的創(chuàng)新點在于程序啟動的時候,使用更為快速的方法校驗文件的正確性和完整性,這樣可以優(yōu)化校驗速度,從而提速軟件的啟動速度。而將整個文件的MD5計算移動到程序啟動后使用后臺線程來計算,這樣對整個程序的體檢上會好很多。

如圖1,本發(fā)明一個具體實施例中,示出一種文件校驗方法的整體流程示意圖,總體上包括:

步驟1,當待校驗文件大小小于預設閾值時,計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值;

步驟2,基于預先配置的所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟2后還包括:

對于大小大于預設閾值的待校驗文件,通過后臺進程計算所述待校驗文件的全量MD5值,根據(jù)所述全量MD5值對所述待校驗文件進行一致性驗證。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟1前還包括:

計算所述待校驗文件的原始文件的MD5值;

其中,當待校驗文件的原始文件大小小于預設閾值時,計算所述待校驗文件的全量原始文件的MD5值;當待校驗文件的原始文件大小大于預設閾值時,計算所述待校驗文件的原始文件全量MD5值、頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟2中對所述待校驗文件進行一致性校驗還包括:

將所述待校驗文件的MD5值結(jié)果與所述帶校驗文件的原始文件MD5值結(jié)果進行比對,確認所述待校驗文件與其原始文件所包含的內(nèi)容是否一致。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟1還包括:調(diào)用Windows中的API函數(shù)獲取所述待校驗文件內(nèi)容。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟1中調(diào)用Windows中的API函數(shù)獲取所述待校驗文件內(nèi)容還包括:調(diào)用API函數(shù)CreateFile獲取所述待校驗文件名;調(diào)用API函數(shù)GetFileSize獲取所述待校驗文件大小;調(diào)用API函數(shù)CreateFileMapping創(chuàng)建所述待校驗文件名內(nèi)存映射;調(diào)用API函數(shù)MapViewOfFile來獲取所述待校驗文件內(nèi)容。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述步驟1中調(diào)用Windows的文件讀取API函數(shù)獲取所述待校驗文件內(nèi)容后還包括:調(diào)用MD5函數(shù)計算所述待校驗文件的MD5值;調(diào)用API函數(shù)UnmapViewOfFile關閉內(nèi)存映射。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述其中所述預設閾值、文件頭內(nèi)容大小和文件尾內(nèi)容大小均為某一存儲單位值,且大于等于0。

本發(fā)明另一個具體實施例中,一種文件校驗方法,所述預設閾值為1024KB。

如圖2,本發(fā)明另一個具體實施例中,示出一種文件校驗系統(tǒng)整體框架示意圖。總體上,包括:

MD5值生成模塊A1,與所述校驗模塊A2相連,用于當待校驗文件大小小于預設閾值時,計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭內(nèi)容的MD5值和/或尾內(nèi)容的MD5值;

校驗模塊A2,與所述MD5值生成模塊A1相連,用于基于預先配置的所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。

接下來,本發(fā)明又一個具體實施例中,介紹一種文件校驗方法的具體實施步驟。

總體上,包括:步驟1,當待校驗文件大小小于預設閾值時,直接計算所述待校驗文件的全量MD5值;當待校驗文件大小大于預設閾值時,計算所述待校驗文件頭m大小內(nèi)容的MD5值和/或尾n大小內(nèi)容的MD5值;其中a、m和n均為某一存儲單位值,且大于等于0;步驟2,根據(jù)所述待校驗文件的MD5值,對所述待校驗文件進行一致性校驗。

本實施例是通過一個包括客戶端和服務器的系統(tǒng),客戶端去執(zhí)行計算每個文件的MD5結(jié)果,并將結(jié)果上報到服務器,服務器通過事先計算的正確文件的MD5配置文件來對比客戶端的結(jié)果的正確性。

配置文件是由多個文件的配置項組成,每一個文件的配置設計如下:

FileName:“xxx”該項是標示文件的名字

FileSize:“xxx”該項是標示文件的大小

FileMd5:“xxx”該項是標示文件的整個內(nèi)容的MD5值

FileHeadMd5:“xxx”該項是標示文件的頭內(nèi)容的MD5值

FileTailMd5:“xxx”該項是標示文件的尾內(nèi)容的MD5值

服務器可以事先和客戶端的計算MD5的方式一樣,獲取每個文件的大小、文件的全內(nèi)容的MD5值、文件頭內(nèi)容的MD5值,文件尾內(nèi)容的MD5值。這份配置作為一份標準的正確配置,客戶端上報的結(jié)果都來對比這份配置的結(jié)果是否一致。

通過上述步驟實現(xiàn)了將多個文件的MD5的校驗配置文件,通過配置文件來校驗客戶端文件的完整性是否正確。

所述步驟2后還包括:對于大于a的待校驗文件,創(chuàng)建后臺進程計算所述待校驗文件的全量MD5值,根據(jù)所述全量MD5值結(jié)果對所述待校驗文件進行一致性驗證。

調(diào)用Windows的文件讀取API函數(shù)獲取所述待校驗文件內(nèi)容還包括:調(diào)用API函數(shù)CreateFile獲取所述待校驗文件名;調(diào)用API函數(shù)GetFileSize獲取所述待校驗文件大??;調(diào)用API函數(shù)CreateFileMapping創(chuàng)建所述待校驗文件名內(nèi)存映射;調(diào)用API函數(shù)MapViewOfFile來獲取所述待校驗文件內(nèi)容。

上述步驟具體包括:通過調(diào)用Windows的文件讀取API函數(shù)來讀取文件內(nèi)容,本文使用內(nèi)存映射文件的方式來讀取文件內(nèi)容,該方法的好處是在讀取非常大的文件時,不會占用很大的內(nèi)存,同時效率也會更高。

具體讀取文件計算MD5的實現(xiàn)如下:

1、調(diào)用API函數(shù)CreateFile來獲取文件句柄。

通過調(diào)用CreateFile來獲取到需要計算MD5文件的文件句柄,參數(shù)傳入文件名。

2、調(diào)用API函數(shù)GetFileSize來獲取文件大小。

通過調(diào)用GetFileSize可以獲取到該文件的大小,參數(shù)需要傳入步驟1獲取的文件句柄。

3、調(diào)用API函數(shù)CreateFileMapping來創(chuàng)建內(nèi)存映射。

通過調(diào)用函數(shù)CreateFileMapping可以創(chuàng)建該文件的內(nèi)存映射。其中比較重要的參數(shù)就是步驟1獲取到的文件句柄。

4、調(diào)用API函數(shù)MapViewOfFile來讀取文件內(nèi)容。

通過步驟3創(chuàng)建了文件映射后,可以通過調(diào)用函數(shù)MapViewOfFile來讀取文件的內(nèi)容,

其中參數(shù)hFileMappingObject則是步驟3創(chuàng)建的文件映射句柄。

其中參數(shù)dwDesiredAccess是文件的訪問權限,本文填入FILE_MAP_READ來表示讀取文件內(nèi)容。

其中參數(shù)dwFileOffsetHigh和dwFileOffsetLow是讀取文件的偏移。

其中參數(shù)dwNumberOfBytesToMap是表示讀取文件內(nèi)容的大小。

而該函數(shù)調(diào)用成功后,其返回結(jié)果就是讀取文件內(nèi)容的起始地址。

5.調(diào)用MD5函數(shù)來計算MD5值。

通過步驟4讀取到了文件內(nèi)容后,接著使用MD5來對文件內(nèi)容來計算其MD5的結(jié)果。這樣就獲取到了文件內(nèi)容的結(jié)果。

6.調(diào)用API函數(shù)UnmapViewOfFile來關閉內(nèi)存映射。

當讀取完文件內(nèi)容并計算完MD5后,通過調(diào)用API函數(shù)UnmapViewOfFile來關閉內(nèi)存映射文件。

本文實現(xiàn)快速校驗文件MD5的方法是,首先獲取一個文件的大小,文件大小的獲取可以使用上面的API函數(shù)GetFileSize來獲取,然后判斷文件大小,如果文件大小小于1024KB則直接對整個文件計算其MD5值,如果文件大小超過1024KB則讀取文件頭的10KB來計算其MD5值,并且讀取文件尾部的10KB來計算其MD5值。本方法是考慮到如果讀取整個文件計算MD5會比較耗時,因為他涉及到大量的磁盤IO操作(指從磁盤讀取文件的內(nèi)容),而一個文件如果發(fā)生變化,那么他的文件頭信息中會存儲文件的整個結(jié)構信息,那么這個結(jié)構信息會發(fā)生變化,所以計算其文件頭的MD5值是比較保險的一個方法,同時也計算文件尾的MD5值是一個雙保險的方式。這樣通過對比文件大小,文件頭MD5和文件尾MD5都相同則說明是同一個文件,如果有一個不相等則說明文件內(nèi)容有被修改。而如果對整個文件內(nèi)容都計算MD5則會比較耗時,從而導致程序啟動速度比較慢。

至此,通過這一步則對每個文件采用不同的策略來計算每個文件的MD5值,對于大文件則計算文件頭部和尾部,對于小文件則計算整個文件。

編寫后臺線程計算大文件的全量內(nèi)容的MD5模塊。

當程序啟動后通過開始的全文件校驗通過后,由于對于非常大的文件采取的是計算文件頭和尾部,所以也存在一些極特殊的情況下,文件內(nèi)容確實發(fā)生了變化,但是文件大小和文件頭尾的MD5值也是一樣的,所以為了更準確的對每個文件進行校驗,本文則在程序啟動后,創(chuàng)建一個后臺線程來獨立的對大文件進行全量的內(nèi)容MD5值計算,具體計算則是通過步驟(2)的方法來對整個文件進行計算。而后臺線程的計算不會影響用戶對軟件的使用體驗。

至此,通過這一步實現(xiàn)了對文件中的大文件計算全量內(nèi)容的MD5值,使用后臺線程來計算大文件的MD5值。

編寫計算結(jié)果上報服務器的模塊。

當程序啟動的時候,使用快速校驗的方法會將所有文件的內(nèi)容計算其MD5值,而對于每個文件的結(jié)果則打包后上報到服務器。其上報數(shù)據(jù)包括文件名,文件的頭MD5值,文件尾的MD5值,全文件的MD5值(小文件則是全文件內(nèi)容的MD5值,大文件則是文件頭和文件尾)。

至此,通過這一步將客戶端計算的多個文件的MD5值一起打包上報到服務器。

編寫服務器校驗模塊。

服務器在收到客戶端文件計算結(jié)果后,服務器將結(jié)果和服務器的配置文件的內(nèi)容進行比較,判斷每個文件的MD5值是否一致,如果一致則說明文內(nèi)容沒有發(fā)生變化,如果不一致則說明文件內(nèi)容有更改。而對于大文件,則是在創(chuàng)建的后臺線程對文件計算的全量的MD5值,則是對比配置文件中的全量的MD5結(jié)果。

通過上面的幾個步驟,本文從用戶體驗角度出發(fā),在程序啟動時啟動速度影響用戶的體驗,所以本文在程序啟動時使用快速的校驗文件MD5的方法,而在程序啟動后,為了保證校驗程序的絕對正確性使用了創(chuàng)建后臺線程來對大文件計算其MD5值,從而保證了極特殊的情況下僅僅計算文件頭和文件尾的MD5值不足以保證文件的一致性。

最后,本申請的方法僅為較佳的實施方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1