王 娜,楊國(guó)強(qiáng)
(1.南昌航空大學(xué)信息工程學(xué)院,江西 南昌 330063;2.江西省計(jì)算技術(shù)研究所,江西 南昌 330002)
作為21世紀(jì)最具發(fā)展?jié)摿Φ氖蠹夹g(shù)之一,RFID(Radio Frequency Identification,射頻識(shí)別)技術(shù)近年來(lái)備受關(guān)注。隨著Web技術(shù)的迅猛發(fā)展和廣泛應(yīng)用,RFID系統(tǒng)的設(shè)計(jì)也由傳統(tǒng)的C/S(客戶/服務(wù)器)模式轉(zhuǎn)向 B/S(瀏覽器/服務(wù)器)模式[1-2]。雖然Web應(yīng)用程序開發(fā)快捷、使用簡(jiǎn)單、容易維護(hù),有良好的可移植性和擴(kuò)展性,但仍存在一些問題。由于RFID手持終端(數(shù)據(jù)采集器)無(wú)法通過Web服務(wù)器端的后臺(tái)程序?qū)?shù)據(jù)直接傳到數(shù)據(jù)庫(kù)中去,而ActiveX技術(shù)能使Web頁(yè)面成為一種跳躍的、動(dòng)態(tài)的頁(yè)面,恰好解決了這個(gè)問題。因此本系統(tǒng)采用了自主開發(fā)的ActiveX控件技術(shù)來(lái)實(shí)現(xiàn)在瀏覽器中與RFID手持終端進(jìn)行雙向數(shù)據(jù)通信。
ActiveX是Microsoft提出的一組使用COM(Component Object Model,部件對(duì)象模型)軟件部件在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的技術(shù)集。ActiveX控件是以二進(jìn)制代碼形式發(fā)布的,與具體的編程語(yǔ)言無(wú)關(guān),可以被任何支持COM的高級(jí)語(yǔ)言及軟件所調(diào)用,有較好的電腦移植性。利用組件技術(shù),就可以實(shí)現(xiàn)一次編寫,多處使用,而不需要重新編譯鏈接,極大地推動(dòng)了軟件的集成化[3-4]。作為針對(duì)Internet應(yīng)用開發(fā)的技術(shù),ActiveX被廣泛應(yīng)用于Web服務(wù)器以及客戶端的各個(gè)方面。同時(shí),ActiveX技術(shù)也被用于方便地創(chuàng)建普通的桌面應(yīng)用程序。其中ActiveX控件是ActiveX技術(shù)的核心??丶墙⒖删幊滩考闹饕兀浅绦虻淖园瑪嗷颡?dú)立的組件,這些程序通常是以EXE、DLL及OCX文件存放在服務(wù)器中。ActiveX控件有自己的屬性和方法,屬性反映了ActiveX控件的內(nèi)部狀態(tài),方法提供了各種功能。它允許最終用戶直接訪問控制所提供的各種功能,直接觀察到控件的狀態(tài)[8-9]。
RFID是一種非接觸式的自動(dòng)識(shí)別技術(shù),它通過射頻信號(hào)自動(dòng)識(shí)別目標(biāo)對(duì)象,可快速地進(jìn)行物品追蹤和數(shù)據(jù)交換[5]。
典型的RFID系統(tǒng)主要由閱讀器、電子標(biāo)簽、中間件和應(yīng)用系統(tǒng)軟件組成。射頻系統(tǒng)2個(gè)主要部分——閱讀器和射頻卡之間通過無(wú)線方式通信,它們都有無(wú)線收發(fā)模塊及天線。射頻卡中有存儲(chǔ)器,用來(lái)存儲(chǔ)用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)等。射頻卡可根據(jù)閱讀器發(fā)出的指令對(duì)這些數(shù)據(jù)進(jìn)行相應(yīng)的實(shí)時(shí)讀寫操作。閱讀器中的控制模塊完成接受、譯碼及執(zhí)行閱讀器命令,控制讀寫數(shù)據(jù),負(fù)責(zé)數(shù)據(jù)安全等功能。它有很強(qiáng)的處理功能,除了完成控制射頻卡工作的任務(wù)外,還需要實(shí)現(xiàn)相互認(rèn)證、數(shù)據(jù)加解密、數(shù)據(jù)校驗(yàn)、出錯(cuò)報(bào)警及與計(jì)算機(jī)的通信等功能。
ActiveX是基于COM的可視化控件結(jié)構(gòu)的一種封裝技術(shù),因此將RFID系統(tǒng)的讀寫過濾模塊封裝成ActiveX控件的形式嵌入到Web網(wǎng)頁(yè),使數(shù)據(jù)同步更人性化,更易于操作,使用人員只需要在頁(yè)面輕松的點(diǎn)擊按鈕即可實(shí)現(xiàn)數(shù)據(jù)的同步。
由于要在系統(tǒng)中采用RFID讀取功能,而RFID設(shè)備通常只提供可供C/S模式下調(diào)用的驅(qū)動(dòng)程序(動(dòng)態(tài)鏈接庫(kù)),因?yàn)檫@些驅(qū)動(dòng)程序無(wú)法在網(wǎng)頁(yè)中直接調(diào)用,所以有必要開發(fā)封裝RFID功能的ActiveX控件,使得用戶可以直接通過網(wǎng)頁(yè)操作RFID設(shè)備,本文采用C#編寫ActiveX的方式實(shí)現(xiàn)。
出于安全性的考慮,基于ActiveX的RFID操作程序可通過ActiveX的安全機(jī)制保證用戶使用的是經(jīng)過驗(yàn)證的程序來(lái)操作RFID設(shè)備。瀏覽器通過以下的方式來(lái)保證ActiveX插件的安全:ActiveX使用了2個(gè)補(bǔ)充性的策略:安全級(jí)別和證明,來(lái)追求進(jìn)一步的軟件安全性;Microsoft提供了一套工具,可以用它來(lái)增加ActiveX對(duì)象的安全性;通過Microsoft的驗(yàn)證代碼工具,可以對(duì)ActiveX控件進(jìn)行簽名,以明確自己是控件的作者。
為了使用驗(yàn)證代碼工具對(duì)組件進(jìn)行簽名,必須從證書授權(quán)機(jī)構(gòu)獲得一個(gè)數(shù)字證書;證書包含表明特定軟件程序是正版的信息,這確保了其他程序不能再使用原程序的標(biāo)識(shí)。證書還記錄了頒發(fā)日期。當(dāng)試圖下載軟件時(shí),Internet Explorer會(huì)驗(yàn)證證書中的信息,以及當(dāng)前日期是否在證書的截止日期之前。如果在下載時(shí)該信息不是最新的和有效的,Internet Explorer將顯示一個(gè)警告;在瀏覽器默認(rèn)的安全級(jí)別中,ActiveX控件安裝之前,用戶可以根據(jù)自己對(duì)軟件發(fā)行商和軟件本身的信任程度,選擇決定是否繼續(xù)安裝和運(yùn)行此軟件。另外一個(gè)問題是RFID設(shè)備通常是不提供安全機(jī)制的,只要通過它驅(qū)動(dòng)程序就能讀取到其中的數(shù)據(jù),為了防止數(shù)據(jù)的泄露,在設(shè)計(jì)中,RFID的封裝ActiveX控件還增加了一層加密/解密機(jī)制,這樣即使非授權(quán)用戶繞過RFID的封裝ActiveX控件讀取了RFID設(shè)備,得到的也是加密后的數(shù)據(jù)。
一個(gè)典型的B/S架構(gòu)系統(tǒng)中RFID設(shè)備應(yīng)用架構(gòu)如圖1所示。
圖1 B/S架構(gòu)系統(tǒng)中RFID設(shè)備應(yīng)用架構(gòu)圖
ActiveX讀卡器控件通常實(shí)現(xiàn)讀卡器的打開/關(guān)閉、讀卡和寫卡3大功能,分為2個(gè)步驟來(lái)實(shí)現(xiàn):開發(fā)ActiveX控件、打包并發(fā)布ActiveX控件和使用。使用C#開發(fā)ActiveX要解決下面3個(gè)問題:(1)使.NET組件可以被COM調(diào)用。(2)在客戶機(jī)上注冊(cè)后,ActiveX控件能通過IE的安全認(rèn)證。(3)在客戶機(jī)上注冊(cè)時(shí),安裝包能通過IE的簽名認(rèn)證。
要解決上面提到的C#開發(fā)ActiveX的3個(gè)問題,就需要在程序代碼中添加ISafeObject控件安全指針。IE默認(rèn)安全級(jí)別設(shè)置中對(duì)沒有標(biāo)記為安全的ActiveX控件進(jìn)行初始化和腳本運(yùn)行的代碼默認(rèn)是被禁用的。如果要消除這個(gè)提示,必須在控件上加上一個(gè)腳本安全標(biāo)志。
一次完整的ActiveX控件簽名,首先需要在程序代碼中添加ISafeObject控件安全指針,然后對(duì)編譯好的控件.ocx、dll文件簽名。將簽好名的文件打包成.cab文件,再對(duì).cab文件簽名。在瀏覽器中通過ActiveX技術(shù)調(diào)用RFID控件的聲明部分代碼如下:
大多數(shù)RFID設(shè)備的驅(qū)動(dòng)程序都提供讀卡器的打開/關(guān)閉、讀卡和寫卡3大功能,通常的RFID系統(tǒng)只需對(duì)驅(qū)動(dòng)程序進(jìn)行調(diào)用封裝即可,本文設(shè)計(jì)的安全RFID系統(tǒng)的特點(diǎn)在于讀卡和寫卡操作需經(jīng)過加密和解密,也就是要寫入卡中的數(shù)據(jù)首先經(jīng)過加密,然后把加密后的數(shù)據(jù)寫入卡中,而讀卡操作則相反,先從卡中讀出加密過的數(shù)據(jù),經(jīng)過解密后得到實(shí)際的數(shù)據(jù)然后返回。具體的讀卡操作步驟如下:
(1)調(diào)用驅(qū)動(dòng)程序打開讀卡器;
(2)調(diào)用驅(qū)動(dòng)程序讀取卡中數(shù)據(jù);
(3)調(diào)用驅(qū)動(dòng)程序關(guān)閉讀卡器;
(4)初始化.NET框架安全代碼的DESCryptoServiceProvider;
(5)用DESCryptoServiceProvider對(duì)卡中讀取的數(shù)據(jù)進(jìn)行解密;
(6)返回解密后的數(shù)據(jù)。
寫卡操作步驟如下:
(1)初始化.NET框架安全代碼的DESCryptoServiceProvider;
(2)用DESCryptoServiceProvider對(duì)要寫入卡中的數(shù)據(jù)進(jìn)行加密;
(3)調(diào)用驅(qū)動(dòng)程序打開讀卡器;
(4)調(diào)用驅(qū)動(dòng)程序?qū)⒓用芎蟮臄?shù)據(jù)寫入卡中;
(5)調(diào)用驅(qū)動(dòng)程序關(guān)閉讀卡器。
ActiveX控件開發(fā)完成后,要進(jìn)行打包和發(fā)布。ActiveX控件可以使用VS 2010的安裝項(xiàng)目進(jìn)行部署,使用VS 2010創(chuàng)建Windows Form的安裝工程就可以將ActiveX的dll進(jìn)行打包。打包完成后,就可以在應(yīng)用程序中使用打包好的ActiveX控件了,創(chuàng)建一個(gè)Web項(xiàng)目,在測(cè)試頁(yè)面的HTML代碼中添加對(duì)ActiveX控件的引用,在default.aspx中輸入以下代碼即可使用:
這里的clsid就是自己生成的GUID編號(hào)。
本文基于ActiveX技術(shù),封裝RFID的讀寫過濾功能,并詳細(xì)介紹了ActiveX控件的編寫與發(fā)布使用,結(jié)合數(shù)據(jù)庫(kù)技術(shù),形成一種基于瀏覽器的實(shí)時(shí)數(shù)據(jù)監(jiān)控系統(tǒng),大大減少了編程的工作量,提高了開發(fā)的質(zhì)量和效率。另外出于安全性的考慮,本文通過ActiveX的安全機(jī)制保證用戶使用的是經(jīng)過驗(yàn)證的程序來(lái)操作RFID設(shè)備的,具有一定的實(shí)際意義。
[1]歐陽(yáng)崢崢.ActiveX技術(shù)在Web程序中的應(yīng)用[J].電腦知識(shí)與技術(shù),2008(1):73-76.
[2]彭義春,陳顯龍.基于ActiveX的WebGIS的現(xiàn)實(shí)方案[J].東莞理工學(xué)院學(xué)報(bào),2007,14(1):81-86.
[3]潘愛民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,1999.
[4]王躍宣,蘇宏業(yè).基于COM技術(shù)的先進(jìn)控制軟件開發(fā)及應(yīng)用[J].化工自動(dòng)化及儀表,2002,29(4):51-53.
[5]周曉光,王曉華.射頻識(shí)別(RFID)技術(shù)原理與應(yīng)用實(shí)例[M].北京:人民郵電出版社,2006.
[6]梁志劍.ActiveX技術(shù)在C語(yǔ)言網(wǎng)絡(luò)教學(xué)平臺(tái)中的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2010(1):53-55.
[7]歐勁昭,黃娟.ActiveX控件的應(yīng)用及其關(guān)鍵技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,1999,16(12):50-52.
[8]Farrar B.ActiveX使用指南[M].劉曉丹譯.北京:機(jī)械工業(yè)出版社,1997.
[9]王利亞.ActiveX控件在網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中的應(yīng)用[J].科技信息:學(xué)術(shù)研究,2008(24):181,183.
[10]王小正.ActiveX控件在B/S結(jié)構(gòu)題庫(kù)系統(tǒng)開發(fā)中的應(yīng)用[J].電腦知識(shí)與技術(shù),2008(S2):4-6.
[11]馬賽紅,朱愛紅,李連.基于ActiveX控件技術(shù)的B/S模式下公文處理的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2011(7):60-63.
[12]賈玉鋒,胡迎新.利用ASP.NET和ActiveX技術(shù)實(shí)現(xiàn)Word文檔的在線編輯[J].現(xiàn)代電子技術(shù),2004(15):46-47.
[13]張海龍.在VC++中利用ActiveX控件進(jìn)行串行通信的犯法[J].網(wǎng)絡(luò)與信息,2008(4):34-36.
[14]腳本之家.使用VS2010 C#開發(fā)ActiveX控件(上)[EB/OL].http://www.jb51.net/article/27115.htm,2013-09-17.