張明禮 袁佳峰



摘 要:本文提出了基于MD5算法的雙重校驗模型,實現了跨平臺的版本一致性校驗,可完成任意形式文件集合的一致性比對。介紹了該模型在投產版本交付、測試過程版本管理和測試案例集內容比對等領域的實際應用情況。
關鍵詞:版本文件;MD5;一致性;散列
文章編號:2095-2163(2019)04-0234-03 中圖分類號:TP311 文獻標志碼:A
0 引 言
隨著金融科技的快速發展,金融產品推陳出新日益加快,軟件版本發布頻率越來越高。如何加強開發、測試、運維團隊之間的協作,有效管控版本文件在整個軟件生命周期中的交付風險[1],如何防范客觀上的差錯風險和主觀上的篡改風險,是軟件行業特別是金融行業需關注的問題。
MD5[2]是一種散列(Hash)技術,廣泛用于加密、解密、數據簽名和數據完整性校驗等方面。本文主要關注數據完整性校驗問題,對于任何一個文件,無論代碼文件、可執行程序、或者其它類型的文件,不管文件字節數的多少,都可以計算出一個MD5值,可以通過對比同一文件的 MD5 值來判斷文件是否被篡改。目前通行的做法是使用MD5算法解決單一文件的比對,本文基于標準MD5算法,提出了一種MD5雙重校驗模型,可以處理任意形式文件集合的一致性比對,在不改變交付物目錄結構的情況下,有效防范投產版本交付、測試版本過程管控[3]中的操作風險。
1 MD5校驗模型介紹
1.1 MD5雙重校驗模型原理
模型的技術原理為,使用標準MD5散列算法獲得每個文件的MD值(第一次),遍歷并記錄所有文件的文件路徑、文件名和MD5值,形成中間過程文件(文件不落地的情況下為字節流),針對該文件(字節流)生成MD5值(第二次),如圖1所示。
1.2 模型設計目標
(1)對于任意形式(單一文件、復雜層級文件夾)的版本文件,最終生成唯一的MD5值。
(2)兼容主流操作系統,在不改變任何系統設置情況下,實現跨平臺的一致性校驗(UNIX和WINDOWS),即對于同一文件集合,在WINDOWS和UNIX平臺下生成的最終MD5值應相同。
1.3 算法生成步驟
(1)遞歸方式遍歷所有層級文件,以版本文件及其路徑構建版本信息二叉排序樹,并生成每個文件的MD5值。
(2)遍歷二叉樹,生成包含文件名稱、文件路徑、MD5值信息的中間過程文件(字節流)。
(3)對中間過程文件(字節流)再次生成MD5值,該MD5值可記錄至平臺或通過郵件告知相關方,并作為一致性比對依據。
2 實例驗證
以個人網銀系統日常變更的版本文件作為實例,說明該校驗模型的應用情況。
(1)在個人網銀系統20190327版本包中,包含一個20190327文件夾,該文件夾內有menusNew.xml等4個文件。
(2)中間過程文件,每一行對應一個文件葉子節點的MD5值,由文件路徑,文件名組成,如圖2所示。該文件可以根據需要寫到本地備查,也可以不落地直接生成MD5。針對此中間過程文件,2次生成MD5值32F1BE00B64BAC55D73EF02DB0E494C0,該MD5值可以通過平臺或郵件,通知不同的操作人員,作為版本文件一致性的比對依據。
(3)Windows客戶端工具。客戶端工具支持Windows下的文件比對,文件路徑指版本文件在本地的存放路徑。平臺(遠程)MD5值是基于中間文件生成的最終MD5值。本地MD5值是根據本地文件生成的MD5值。在D:\\MD5目錄下,存放了網銀20190327版本包,Windows客戶端工具如圖3所示。
(4)UNIX平臺客戶端比對工具。 UNIX類平臺雖然具有多樣性,但一般都預裝有perl解釋器,并且無需安裝運行環境,普通用戶可以直接執行。經過調研比較,本研究選擇perl語言開發比對工具,兼容AIX、 HP-UX、 LINUX等UNIX類工作平臺,要求perl環境為5.6及以上版本。工具支持文件和目錄的校驗,支持相對路徑和絕對路徑,通過如下格式調用perl腳本進行MD5一致性校驗:
perl md5check.pl –d directory(filename) -m md5Value。
Perl環境版本號檢查方法如下:
[host1013_cbs]/cbs/md5 >perl -v
This is perl,v5.10.1 (*) built for aix-thread-multi
在/cbs/md5/nb目錄下,存放了網銀20190327版本包,下面給出了3種情況的比對示例:
①輸入正確的MD5值,提示MD5比對通過:
[host1013_cbs]/cbs/md5 >perl md5check.pl-d nb -m 32F1BE00B64BAC55D73EF02DB0E494C0
MD5 Verified OK
②輸入錯誤的MD5值,提示MD5比對不通過:
[host1013_cbs]/cbs/md5 >perl md5check.pl-d nb -m 32F1BE00B64BAC55D73EF02DB0E494C1
MD5 Verified FAILURE, please recheck the md5 value you input!!
③輸入正確的MD5值,但修改了版本文件menusNew.xml(例如在文件最后增加一個字符),提示MD5比對不通過:
[host1013_cbs]/cbs/md5 >perl md5check.pl-d nb -m 32F1BE00B64BAC55D73EF02DB0E494C0
MD5 Verified FAILURE, please recheck the md5 value you input!!
(5)性能表現。對于100 M以下的版本文件,在1 s內即可獲得文件集的MD5結果;800 M以上版本文件,其處理時間在10 s內,屬于可接受的等待時間。但測試發現,較大文件的CPU消耗略高,建議不要在生產環境的業務高峰期使用該工具。
為了得到MD5客戶端工具的使用效率和性能開銷情況,按照版本文件大小區分,分別選取大中小3種類型的版本文件,進行執行時間、系統資源消耗的監控,測試結果見表1。
MD5客戶端工具的運行時間和版本大小成正比,CPU資源的消耗主要和版本文件的大小、CPU主頻與數量、存儲設備性能等有關。
3 應用場景
該模型在投產版本交付、測試過程版本管理和測試案例集內容比對等領域得到了實際應用,具體應用情況如下:
3.1 投產版本交付管理領域
投產版本是指最終發布在生產環境中的一組特定軟件包及其各類附屬文件的集合,一般包括目標代碼、腳本、配置文件和安裝說明文檔等。投產版本交付的主要環節為:版本文件在項目開發方制作完成后,經由測試方測試通過,最終交付給運維方在生產環境變更實施。對于任何一個版本文件集,開發方在制作完成后提交至版本平臺,并檢驗本地和平臺MD5值是否保持一致;測試方在MD5一致性校驗通過后開展測試驗證工作;實施方在MD5一致性校驗通過后方可進行生產環境發布。可以看到,模型的應用貫穿了投產版本從開發、測試到投產的全過程。通過提供跨平臺MD5一致性校驗,滿足了應用系統平臺多樣性需求,實現了浦發銀行應用系統投產版本交付的全覆蓋,月均交付投產版本超過300個。該模型的成功應用,替代了傳統的基于文件名、字節數和時間戳等內容為主的手工比對,實現了針對版本內容的一致性校驗。不僅有效防范了客觀上的差錯風險(例如網絡傳輸過程中的部分文件意外丟失)和主觀上的篡改風險(例如上傳未經授權的惡意代碼),同時提高了版本比對效率,為應用系統的安全投產與穩定運行提供了重要保障。
3.2 測試版本過程管控領域
生產環境的變更往往有嚴格的變更管理流程來管控,測試環境一般由項目組自行管理,應用版本更新相對來說具有靈活性和隨意性。假定在某一輪測試過程中發生了版本更新,就會引發測試結果與測試版本之間無法有效對應,進而影響測試結果的可信度。使用了基于此校驗模型的版本變更檢測工具,可隨時監控被測環境的應用版本更新情況。當測試版本變更時,項目開發人員和測試人員都會收到版本變化的郵件通知,及時掌握每次版本更新的情況,掌控協調版本更新節奏,減少了對功能、性能差異的探究以及頻繁更新導致的重復測試。測試版本從首次提交到測試結果發布,整個測試過程納入管控,有力推進了測試版本交付和變更過程規范化。
3.3 測試案例自動化生成項目
基于業務流程圖生成的測試案例集中,測試案例數量往往達到數百個。如果業務流程圖因業務變化需要更新,更新前后生成的有差別的案例可能只有幾個,通過人工識別這些差別,效率非常低。通過基于該模型的中間過程文件比對,可以快速的定位哪些案例發生了變化,在系統層面予以標記,節省了大量的人工成本。
4 結束語
本文提出了一種改進的MD5校驗模型,該模型成功應用于投產版本文件交付、測試過程版本管控、測試案例集內容比對等領域。模型的提出及其應用,提升了投產版本交付的效率和安全性,實現了測試版本的過程管控,大幅提升了測試案例集比對的效率。基于該模型的研究和應用,對于軟件行業和金融行業具有一定的參考價值。
參考文獻
[1]董昕,郭勇,王杰. 基于DevOps能力模型的持續集成方法[J]. 計算機工程與設計,2018,39(7):1930-1937.
[2]崔永輝,賈連興,張江. MD5算法研究[C]//第17屆中國系統仿真技術及其應用學術年會論文集(17th CCSSTA 2016).安徽:中國自動化學會系統仿真專業委員會,2016,17:216-218.
[3]馮文亮,陳俊,成潔. 測試版本管理平臺設計與應用[J]. 中國金融電腦, 2018(5):57-62.