1.一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于包括以下步驟:
S1:源數(shù)據(jù)的備份保存;采用USB和WIFI兩種不同提取方式,增加了識別設(shè)備上數(shù)據(jù)的創(chuàng)建時間,及最后修改時間的環(huán)節(jié),當(dāng)備份到本地后再修改該備份文件在設(shè)備上的真實創(chuàng)建時間即最后修改時間,得到與設(shè)備原始數(shù)據(jù)一致的文件;
S2:以zip方式壓縮源數(shù)據(jù),使用壓縮文件夾的遞歸算法;
使用第三方zip壓縮庫輸入需要壓縮的文件夾路徑后,開始檢索當(dāng)前路徑下的文件夾和文件,如果是文件夾則再次調(diào)用該算法進(jìn)行遞歸檢索,如果是文件,則開始以文件流的方式打開該文件,在寫入該動態(tài)庫的ZipEntry對象中,同時刷新與界面交互的當(dāng)前正在壓縮的文件名及大小,最重要的是在壓縮完該文件時,在調(diào)用下列方法保存原始文件的最后修改時間;
FileInfo fileINFO=new FileInfo(file);
entry.DateTime=fileINFO.LastWriteTime.ToUniversalTime();
S3:獲取文件MD5值;
S4:十六進(jìn)制字節(jié)全部逆向處理,執(zhí)行字節(jié)流的逆向操作:
首先設(shè)定一個字節(jié)緩存buffer:byte[]inSertData=new byte[2048],同時設(shè)定已加密大小初值:int completedLength=0,加密文件總大小long inFileSize=srcStream.Length;
最后開始執(zhí)行逆向處理的核心算法:每次讀取文件中2KB的數(shù)據(jù)轉(zhuǎn)化為byte[]數(shù)組,然后該數(shù)組中每個字節(jié)執(zhí)行:inSertData[i]=(byte)(byte.MaxValue-inSertData[i])操作;completedLength加上byte[]數(shù)組大小用于和inFileSize文件總大小做比較,如果小于inFileSize再循環(huán)返回讀取文件下一個2KB數(shù)據(jù)進(jìn)行同樣操作,如果相等則表示讀取到該文件末尾字節(jié),結(jié)束逆向操作;
S5:后綴名設(shè)定及核心加密處理,根據(jù)程序內(nèi)部定義的項目文件后綴名來再次加密字節(jié)流并寫入文件MD值;
S51:獲取項目文件后綴名的字節(jié)計算及加密碼:
獲取項目文件后綴名的字符串,由該字符串得出字節(jié)數(shù)組1,數(shù)組中的數(shù)字累加再除以10得到余數(shù),而余數(shù)則為該項目文件的后綴加密碼;再將S4中獲取的新的字節(jié)流數(shù)組與余數(shù)異或處理得到數(shù)組2;
S52:在新的字節(jié)流中加入項目后綴標(biāo)識,利用S1得出的加密字節(jié)數(shù)組2,和后綴字節(jié)數(shù)組1,將后綴數(shù)組加入到文件數(shù)組的最前面即得到數(shù)組3;
S53:在字節(jié)流中寫入MD5值,在S3中獲取的MD5值為32位的字符串,將該字符串轉(zhuǎn)化為字節(jié)數(shù)組為128位的字節(jié)數(shù)組;根據(jù)S51中的后綴加密碼和S52中的新字節(jié)流數(shù)組3,將該128位的MD5字節(jié)數(shù)組插入到新字節(jié)流倒數(shù)得到最終的字節(jié)流,完成三重加密,將最終的字節(jié)流寫入到導(dǎo)出的項目文件中即完成了整個項目文件的制作;
S6:案例項目文件的加載,判斷文件是否為項目文件;打開選中的項目文件,以文件流的形式打開獲取字節(jié)數(shù)組,開始讀取0-3位的字節(jié)數(shù)組NewArray,比對NewArray與后綴名字節(jié)數(shù)組2是否相等,如果相等則從項目文件中剔除掉該后綴名的字節(jié)數(shù)組,再繼續(xù)進(jìn)行下一步,如不相等則提示該文件不是可以讀取的項目文件;
S7:逆向解密項目文件;
S71:獲取項目文件的MD5值
根據(jù)S6步驟中得出項目文件的后綴名字節(jié)數(shù)組2,參照S51步驟得出后綴加密碼;以文件流的方式打開項目文件,找到文件最后倒數(shù)第3個字節(jié),往前讀128個字節(jié)數(shù)組并將該數(shù)組從文件中剔除掉,將該MD5值數(shù)組轉(zhuǎn)化為字符串類型則獲取了32位的MD5字符串,將該MD5值保持下來用于后續(xù)解密后的文件校對;
S72:文件字節(jié)流的異或逆向解密處理
參照S51中的后綴加密碼及異或加密算法對項目文件全部解密處理;
參照S4中的字節(jié)數(shù)組逆向操作再對項目文件解密處理;
S8:提取數(shù)據(jù)源中的有效數(shù)據(jù);
S9:以WPF的顯示技術(shù)結(jié)合地圖及時間線對數(shù)據(jù)精準(zhǔn)展示;
S91:WPF界面嵌入地圖插件,首先封裝地圖離線服務(wù)器的離線圖片,將這些地圖全部寫入db數(shù)據(jù)庫中,在WPF軟件界面開啟時,以檢索到的定位點(diǎn)來加載界面的地圖顯示;
S92:展示數(shù)據(jù),根據(jù)S82步驟中的解析數(shù)據(jù),在界面上展示所有提取到的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于:所述S1中USB提取為:Android設(shè)備開啟USB調(diào)試模式,調(diào)用adb.exe程序拷貝設(shè)備文件到本地,再文件權(quán)限不夠的情況下,修改可執(zhí)行權(quán)限后再拷貝;iOS設(shè)備調(diào)用iTunes的設(shè)備服務(wù)先備份到本地電腦,在解析該iTunes備份出的文件數(shù)據(jù);
WIFI提取為:PC端程序開啟socket監(jiān)聽作為服務(wù)端,而移動設(shè)備端以安裝App的客戶端模式,以掃碼方式連接到PC端服務(wù)器;PC端監(jiān)聽到客戶端連接后再啟動數(shù)據(jù)傳輸命令執(zhí)行備份文件操作;
本地保存及設(shè)備信息固定為:本地文件保存在用戶指定位置或程序默認(rèn)存儲位置,可以同時對多個設(shè)備進(jìn)行數(shù)據(jù)備份提取,備份完成后會做統(tǒng)一標(biāo)識并保存設(shè)備的各項信息,以便在加載項目文件時對該設(shè)備備份文件的識別。
3.根據(jù)權(quán)利要求2所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于:所述S3采用異步分塊計算MD5,首先設(shè)定一個數(shù)據(jù)緩沖區(qū)塊int bufferSize=1048576;再打開文件異步讀取緩沖區(qū)塊大小的數(shù)據(jù)進(jìn)行MD5值的計算,計算完成之后記錄下當(dāng)前塊的MD5,再讀取文件的下一數(shù)據(jù)塊,循環(huán)執(zhí)行該操作直到整個文件的MD5值計算完畢,最后該方法返回一個32位字符串的MD5值;
設(shè)計二十個線程同時執(zhí)行MD5值計算,并設(shè)計有文件計算位置的全局標(biāo)識及線程互斥鎖,最大限度運(yùn)用CPU計算能力在最短時間內(nèi)計算出該大文件的MD5值。
4.根據(jù)權(quán)利要求3所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于:所述S4中在大項目文件時分塊分段處理,采用多線程模式,Byte即字節(jié):數(shù)值為0-255。
5.根據(jù)權(quán)利要求4所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于:所述S5中加密處理方法的后綴名加密適合多軟件移植項目文件處理,設(shè)定不同項目文件的后綴名及可以完成不同軟件的項目導(dǎo)出。
6.根據(jù)權(quán)利要求5所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于所述S8的詳細(xì)步驟如下:
S81:解壓項目文件
根據(jù)S72步驟中解密出的項目文件,修改該文件后綴名為.zip,再調(diào)用zip解壓算法對該文件進(jìn)行解密,在解密過程中,需要保存修改原始文件的最后修改時間,確保在后面提取數(shù)據(jù)的行為時間的準(zhǔn)確性;
S82:提取項目文件中的行為及位置信息
通過C++算法對可能存在數(shù)據(jù)的應(yīng)用的重要數(shù)據(jù)進(jìn)行檢索提取,底層后臺返回的為Json數(shù)據(jù)表,再通過WPF界面綁定的后臺數(shù)據(jù)對這些數(shù)據(jù)進(jìn)行排序和展示。
7.根據(jù)權(quán)利要求6所述的一種基于WPF技術(shù)生成及加載特定項目文件的方法,其特征在于:所述S91中如果在離線地圖的db數(shù)據(jù)庫中能找到,則先本地加載,如果沒有則連網(wǎng)下載這些離線地圖,并在將這些離線地圖保存下來用于下一次的地圖檢索。