摘 要: 隨著我國航空技術的不斷發展,飛機結構越來越復雜,被測試的參數數量劇增,校準曲線文件數量也隨之劇增。因此,手動設置Excel校準曲線文件密碼的工作效率已經影響到了試飛任務的執行。為了提高Excel校準曲線文件加密解密的效率,深入研究了Excel COM組件的接口和使用方法,采用VC++開發軟件,利用Windows API函數設計和實現對批量校準曲線文件的自動加密解密。通過對軟件進行測試,軟件運行穩定可靠。
關鍵詞: 校準曲線; COM組件; Windows API函數; 自動加密; 解密
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2013)14?0038?03
Software design for automatic encryption and decryption on batch of Excel calibration curve files
GUO Yong?lin, ZHANG A?li, DIAO Xue?min
(Chinese Flight Test Establishment, Xi’an 710089, China)
Abstract: With the development of aerospace technology in China, the aircraft structure becomes more and more complex, and the number of calibration curve file increases sharply with the sharp increase of tested parameters. Therefore, the work efficiency of manually setting the Excel calibration curve file password has affected the flight task execution. The interface and application method of Excel COM components were deeply investigated to improve the efficiency of encryption and decryption of Excel calibration curve file. The development software VC++ and Windows API function are utilized for implementing automatic encryption and decryption on batch of calibration curve files. The software ran stably and reliably during software test.
Keywords: calibration curve; COM component; Windows API function; automatic encryption; decryption
0 引 言
飛行試驗數據是飛機研制過程飛行試驗中所獲得的最寶貴的科研信息資料,凝聚了設計、制造、試飛等多方面技術人員的心血,甚至冒著生命危險而取得。飛行試驗數據處理[1?2]是飛行試驗工程中非常重要的環節,直接提供了試飛數據結果。該結果不僅為支線飛機的試驗定型、鑒定、合格審定等提供最直接的定量依據,同時也是被試對象全面、客觀真實的模型的數字體現。而校準曲線在飛行試驗數據處理中起著至關重要的作用,如果校準曲線信息被隨意篡改,直接影響數據結果的正確性,進而影響對飛機復雜結構的合理性的正確判定。
隨著我國航空技術的不斷發展,飛機結構越來越復雜,被測試的飛機結構性能系統、航電系統、發動機系統等測試難度也逐漸增加,促進了測試技術的發展,也帶動了測試設備和測試傳感器的發展。為了保證整個飛機系統測試的準確無誤,采用了多種專用傳感器來測試一些特殊的參數,這些被專用傳感器測試的參數被稱為加裝參數,每個加裝參數都對應著一個校準曲線信息文件,通過試飛數據處理程序和校準曲線信息文件能計算出參數正確的物理量。由于加裝參數的不斷增加,校準曲線信息文件數量也劇增。
校準曲線信息是測試工程師根據傳感器的特性編制,并按照標準格式形成的Excel表格文件。為了保證校準曲線文件在傳送過程中不被篡改,并保持和編制的原始校準曲線文件一致,測試工程師將校準曲線文件進行加密后,才傳送給數據處理工程師以及需要該文件的其他試飛工程師。同時,為了防止參數名和校準曲線文件名稱不一致,導致校準曲線文件誤用的情況,測試工程師在加密時還要核查參數名和校準曲線文件名稱是否匹配。由于需要對校準曲線進行修正工作,因此,需要對加密的校準曲線文件進行解密。對于Excel校準曲線文件的加密解密方法采用的是手動加密解密,當校準曲線文件越來越多時,手動加密解密的工作效率將嚴重影響試飛任務的工作計劃,因此,需要提高校準曲線文件加密解密的效率。本文重點介紹基于Excel校準曲線文件快速加密解密的一種方法和軟件實現。
1 COM組件概述
1.1 COM組件的概念和特性
組件對象模型[3?5](Component Object Model,COM)是關于如何建立組件以及如何通過組件建立應用程序的一個規范。它是一個說明如何建立可動態交替更新的組件的規范。COM的接口是一個包含函數指針數組的內存結構。每個數組元素包含的是一個由組件所實現的函數的地址。一個組件就是一個接口集。一個COM組件可支持多個接口。利用C++類[6?7]的多繼承特性可以實現一個支持多個接口的組件。COM接口具有不變性、多態性等特性。不變性指COM組件接口公布后,將保持不變,當對組件升級時,一般不會修改已有接口,而是加入新的接口;多態性指可以按同一種方式處理不同的對象。COM Component(COM組件)是微軟公司為了使計算機工業的軟件生產更加符合人類的行為方式開發的一種新的軟件開發技術。在COM構架下,人們可以開發出各種各樣的功能專一的組件,然后將它們按照需要組合起來,構成復雜的應用系統。由此帶來的好處是多方面的:可以將系統中的組件用新的替換掉,以便隨時進行系統的升級和定制;可以在多個應用系統中重復利用同一個組件;可以方便的將應用系統擴展到網絡環境下;COM與語言,平臺無關的特性使所有的程序員均可充分發揮自己的才智與專長編寫組件模塊。
1.2 Excel COM組件提供的接口
Excel COM組件提供了_Application,_Workbook,_Worksheet,Range,Workbooks和Worksheets等類,每個類封裝了對Excel表格操作的若干個接口,這些接口實現了對Excel表格操作的所有功能。本軟件主要運用了_Application類的CreateDispatch,SetVisible,GetWorkbooks,Quit和ReleaseDispatch接口;Workbooks類的AttachDispatch,Open,ReleaseDispatch和Close接口;_Workbook類的AttachDispatch,GetSheets,GetActiveSheet,ReleaseDispatch,Save和Close接口;Worksheets類的AttachDispatch,GetItem和ReleaseDispatch接口;_Worksheet類的AttachDispatch,Protect,Unprotect和ReleaseDispatch接口。
2 軟件的設計思路及結構框圖
2.1 軟件設計關鍵技術
實現Excel表格校準曲線文件批量加密解密需要實現兩個關鍵技術,第一,需要實現對Excel文件的搜索和記錄;第二,需要實現對Excel表格文件自動加密解密。利用MFC[8?9]提供的CFileFind類的FindFile,FindNextFile和GetFileName函數實現對整個目錄中Excel文件的搜索,利用CStringArray類記錄搜索到的Excel文件。利用Excel COM組件提供的Unprotect和Protect接口,實現對Excel表格的自動化加密解密。
使用C++類對Excel COM組件提供的Unprotect和Protect接口進行了封裝,簡化了對Excel COM組件接口的使用,提高了軟件的穩定性和可維護性。
2.2 軟件設計結構框圖
該軟件采用模塊化的設計思路,實現了對Excel表格校準曲線文件自動化的批量加密和解密。軟件主要包括四個模塊,分別為定位初始目錄模塊、設置密碼模塊、取消密碼模塊和保存日志模塊。設置密碼模塊和取消密碼模塊是該軟件設計的核心內容,軟件結構框架圖如圖1所示。
圖1 軟件結構框架圖
3 軟件詳細設計
3.1 軟件設計流程圖
軟件采用模塊化的設計思路,通過搜索和記錄指定目錄的Excel文件,利用Excel com組件提供的Unprotect和Protect接口,實現對記錄的所有Excel文件進行自動化的加密解密,同時將未加解密成功的文件名以及參數名稱和校準曲線文件名稱不匹配的文件名記錄到日志文件中,測試工程師根據日志文件信息可以修正錯誤。軟件設計的流程圖如圖2所示。
3.2 軟件算法分析
3.2.1 搜索Excel文件的功能實現
利用MFC提供的CFileFind類實現對指定目錄Excel文件的搜索。FindFile函數打開一個文件搜索,函數返回值為0時表示調用成功,否則調用失敗。接著使用FindNextFile函數繼續文件搜索,函數返回值為0時表示這是最后一個文件,否則表示還有多個文件。GetFileName函數獲取搜索到的文件名,通過比較文件名的擴展名判斷是否是Excel文件,如果是Excel文件則記錄到CStringArray類中,否則調用FindNextFile函數繼續文件搜索,直到所有文件搜索完畢為止。當文件搜索完成后,調用Close函數關閉文件搜索。
圖2 軟件設計流程圖
3.2.2 判斷Excel校準曲線文件參數名和文件名是否匹
配的功能實現
通過GetItem接口獲得校準曲線文件包含的參數名,將這個參數名和CFileFind類的GetFileName函數獲取的文件名進行對比,便可以檢查校準曲線文件參數名和文件名是否匹配。
3.2.3 Excel校準曲線文件加密解密的功能實現
Excel校準曲線文件加密解密是本軟件設計的核心內容,為了保正軟件運行的穩定性和維護性,利用CRWExcelFile類對Excel的接口進行了封裝。CRWExcelFile類的ExcAppInstance函數封裝了CreateDispatch和SetVisible接口,實現了Excel實例進程的啟動和實例圖標在任務欄的隱藏;OpenExcByName函數封裝了AttachDispatch,Open,GetWorkbooks,GetSheets,GetActiveSheet和GetItem接口,實現了以Excel文件名打開一個Excel文件,并將一個工作薄和所有工作表單進行關聯,從中獲取當前活動工作表單;ProtectExcWsht函數封裝了Protect接口,實現了當前工作表單的加密;UnProtectExcWsht函數封裝了Unprotect接口,實現了當前工作表單的解密;SaveExcWbk函數封裝了Save接口,實現了工作表單密碼修改的保存;ExitInstance函數封裝了Close,Quit和ReleaseDispatch接口,實現了打開工作薄的關閉,以及Excel實例的正常進程退出。
在使用Excel接口的時候,首先必須啟動一個實例進程,并需要注意部分接口的使用有嚴格的順序要求,不按照要求使用接口,將無法實現對Excel表格的操作。在使用完Excel接口的時候,一定要及時退出實例進程,否則會一直占用內存資源,更糟糕的情況是內存資源耗盡,系統崩潰。
4 軟件的測試
通過新支線飛機的Excel校準曲線文件對該軟件的功能、性能、效率、正確性、處理異常的能力等方面進行了測試,該軟件運行正常,穩定性好。尤其在效率上得到了大大的提高,經過測試,手動設置密碼100個Excel校準曲線文件的密碼,花費時間大約是30 min,而使用該軟件花費時間不到3 min,效率提高了大約9倍,如果考慮文件包含的參數名和文件是否匹配這項任務的話,效率的提升率會更高。該軟件的運行界面如圖3所示。
圖3 軟件運行界面圖
5 結 語
本軟件在VC++ 6.0開發環境下實現了批量Excel校準曲線文件自動加密解密的軟件設計。并對該軟件功能、性能、效率和穩定性等方面進行了測試。經過測試,該軟件能夠在WinXP Sp2及以上版本的操作系統上穩定運行,在效率上得到了巨大的提升。目前該軟件已經在新支線和其他重點型號的飛行試驗中得到廣泛使用。
參考文獻
[1] 中國飛行試驗研究院.航空武器裝備飛行試驗指南[M].西安:中國飛行試驗研究院,2010.
[2] 彭國金,劉嫚婷.非結構化海量網絡試飛數據處理技術研究[J].現代電子技術,2011,34(14):121?123.
[3] 楊秀章.COM技術內幕[M].北京:清華大學出版社,1999.
[4] 邱仲潘.COM與COM+從入門到精通[M].北京:電子工業出版社,2000.
[5] 潘愛民.COM本質論[M].北京:中國電力出版社,2001.
[6] 李師賢,蔣愛軍.C++ Primer中文版[M].4版.北京:人民郵電出版社,2008.
[7] 鄭莉.C++語言程序設計[M].4版.北京:清華大學出版社,2010.
[8] 侯俊杰.深入淺出MFC[M].2版.武漢:華中科技大學出版社,2001.
[9] 孫鑫.VC++深入詳解[M].北京:電子工業出版社,2006.