




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、利用 Java 語(yǔ)言開發(fā)智能卡應(yīng)用程序內(nèi)容提要:本文介紹了智能卡的分類、文件系統(tǒng)、接口協(xié)議和 Java 卡的知識(shí)及其開發(fā)流程,介紹了 JCDK 環(huán)境的下載、安裝和 8 個(gè)基本命令的使用。本文通過銀行卡的應(yīng)用實(shí)例,指導(dǎo)讀者編寫智能卡 Applet,將 CAP 文件下載到智能卡上和使用 apdu 文件訪問智能卡的程序。通過本文的學(xué)習(xí),應(yīng)該掌握智能卡的實(shí)現(xiàn)技術(shù),可以熟練使用 JBuilde 編寫智能卡程序。關(guān)鍵字:分類、文件系統(tǒng)、接口協(xié)議、Java 卡引言:對(duì)于 IC(Intelligent Card)卡,相信大家都很熟悉,如經(jīng)常使用的銀行卡、電話卡、地鐵卡,這些都是 IC 卡的種類。每個(gè) IC 卡
2、都有專門的代碼控制它們的實(shí)現(xiàn)功能,如某人利用地鐵 IC 卡從一個(gè)檢測(cè)門進(jìn)入,然后在目的地的檢測(cè)門出去,IC 卡便會(huì)將相關(guān)的信息傳送給服務(wù)器,使服務(wù)器可以進(jìn)行一系列的數(shù)據(jù)處理。正文:1 智能卡1.1智能卡的分類智能卡按嵌入的芯片種類分,可以分為以下兩類。1. 接觸式卡這種卡需要使用讀卡器的裝置進(jìn)行信息的讀寫操作。這種卡的表面上嵌著小的金屬片,當(dāng)把卡插入讀卡器時(shí),該小金屬片就會(huì)同一個(gè)電子接頭接觸,通過這個(gè)電子接頭對(duì)芯片讀寫數(shù)據(jù)。接觸式卡主要分為以下兩類卡。1)存儲(chǔ)卡存儲(chǔ)卡不包含復(fù)雜的處理器,它不能動(dòng)態(tài)的管理文件,與讀卡器的通信是同步通信。IC 電話卡就是存儲(chǔ)卡。2)微處理器卡微處理器卡是本文所要討
3、論的卡片,它與存儲(chǔ)卡的的區(qū)別是:具有動(dòng)態(tài)處理數(shù)據(jù)的功能。微處理器卡的系統(tǒng)結(jié)構(gòu)有微處理器(CPU)和 EEPROM(E2PROM),如 SIM 卡(手機(jī)卡),銀行卡等都是微處理器卡。接觸卡和讀卡器如圖 1 所示。圖 12. 非接觸式卡非接觸式智能卡看上去和普通的塑料信用卡相似,在卡體中內(nèi)嵌了天線和微電子芯片,當(dāng)把它放近讀卡器的天線時(shí),它們之間就可以完成一次信息交換。這使其不用與感應(yīng)器接觸,便可交換信息,并且處理時(shí)間極短。如地鐵卡、高速公路收費(fèi)卡便是非接觸卡。注意:智能卡遵循 ISO7816 標(biāo)準(zhǔn)。ISO7816 標(biāo)準(zhǔn)規(guī)定了卡用塑料的物理特性,包括溫差范圍、彈性、電子觸點(diǎn)的位置以及內(nèi)置微芯片和進(jìn)行
4、信息交換的方式等。11.2智能卡的文件系統(tǒng)智能卡的文件系統(tǒng)和 DOS 的樹形文件系統(tǒng)相似。智能卡的文件分為:DF(Dedicated File)和EF(Elementary File)。DF 包含控制信息,可以成為 EF 或 DF 的父文件,與 DOS 中的目錄文件相同;EF 是數(shù)據(jù)單位的集合,不能成為任何文件的父文件,與 DOS 中的 TXT 文件相同。智能卡文件系統(tǒng)必須有根文件(ROOT),是 DF 文件,也可以稱為 MF(Master File 主文件)。每個(gè)文件都有一個(gè)文件的 ID(兩個(gè)字節(jié)),如 ROOT 的 ID 一般為“3F00”。如果要對(duì)文件進(jìn)行讀寫操作,就必須先用“selec
5、t”命令來選擇該文件的 ID。如有興趣希望進(jìn)一步了解智能卡的文件結(jié)構(gòu),請(qǐng)參閱 ISO7816 標(biāo)準(zhǔn),查看地址是 http:/www.iso.ch/iso/en /ISOOnline.frontpage,在主頁(yè)面的搜索框內(nèi)填入“7816”關(guān)鍵字查找相關(guān)的文檔,網(wǎng)址 上也有該文件,目錄是 35ThemesJBuilderC32。1.3智能卡的接口協(xié)議智能卡是通過它的 8 個(gè)觸點(diǎn)(該 8 個(gè)觸點(diǎn)由 ISO7816 標(biāo)準(zhǔn)規(guī)定,如表 1 所示)與讀卡器進(jìn)行通信的。表 18 個(gè)觸點(diǎn)的定義觸點(diǎn)定義觸點(diǎn)定義C1Vcc = 5V(供電電壓)C5Gnd(接地)C2Rese
6、t(重置信號(hào))C6Vpp(編程電壓)C3Clock(時(shí)鐘信號(hào))C7I/O(數(shù)據(jù)輸入/ 輸出)C4RFU(保留)C8RFU(保留)根據(jù) ISO7816.4 規(guī)定,智能卡與外界的通信數(shù)據(jù)接口是 APDU(Application Protocol Data Units,應(yīng)用協(xié)議數(shù)據(jù)單元)。APDU 制定了命令格式和響應(yīng)格式,在數(shù)據(jù)交流中,卡只能接受信息,等待讀卡器或終端向它發(fā)送 APDU,收到 APDU 后,執(zhí)行 APDU 中的命令,返回 APDU 響應(yīng)。如圖 2 所示。返回apdu命令的響應(yīng)發(fā)送apdu命令發(fā)送讀卡器智能卡圖 2通過 APDU 命令和返回響應(yīng),便完成卡與讀卡器或終端的通信。APDU
7、 的命令格式如表 2 所示。表 2 APDU 的命令格式必須部分(Mandatory Header)可選擇部分(Conditional Body)CLAINSP1P2LcData fieldLe上述符號(hào)表示的意思如下:( 1)CLA - Class Byte:識(shí)別 Applet。( 2)INS - Instruction Byte:定義 Applet 的指令。( 3)P1:第一個(gè)命令參數(shù)。( 4)P2:第二個(gè)命令參數(shù)(P1,P2 根據(jù) INS 不同,也有不同的含義)。( 5)Lc:數(shù)據(jù)(Data Field)的長(zhǎng)度。( 6)Data Field:數(shù)據(jù)的欄位。( 7)Le:回傳數(shù)據(jù)的長(zhǎng)度。注意:
8、智能卡程序和網(wǎng)絡(luò)的小程序都稱為 Applet。APDU 響應(yīng)命令的格式如表 3 所示。2表 3APDU 響應(yīng)命令的格式選擇部分(Conditional Body)必須部分(Mandatory Trailer)Data fieldSW1SW2上述符號(hào)表示的意思如下:( 1)Data Field,數(shù)據(jù)的欄位。( 2)SW1,執(zhí)行狀態(tài)參數(shù) 1,執(zhí)行參數(shù)由一個(gè)字節(jié)表示。( 3)SW2,執(zhí)行狀態(tài)參數(shù) 2。SW1 + SW2 =“9000”表明命令執(zhí)行成功。應(yīng)用上述知識(shí),選擇 SIM 卡的 ROOT 文件的 APDU 命令的格式如表 4 所示。表 4 ROOT 文件的 APDU 命令的格式CLAINSP1
9、P2LcDataA0A40023F00上述符號(hào)表示的意思如下:( 1)A0:表示 SIM 卡。( 2)A4:表示 Select 命令。( 3)P1、P2 為 0,不表示任何意義。( 4)Lc 說明 Data 的長(zhǎng)度為 2 個(gè)字節(jié)。( 5)Data=3F00 是 ROOT 的文件 ID。如果 APDU 響應(yīng)為 9F1A,說明指令成功完成。1.4Java 智能卡1996 年 11 月,Sun 公司正式發(fā)布 JAVA Card1.0 版本的規(guī)范?,F(xiàn)在 Java 卡的最新的規(guī)范是 2.2版。其實(shí) Java 卡的實(shí)質(zhì)是一部功能齊全、但規(guī)模較小的電腦,其硬件主要是為了保證 Java 卡的運(yùn)行環(huán)境的需要。其
10、最低的硬件配置要求為:( 1)RAM。最低要求是 512 bytes,用于存放程序執(zhí)行時(shí)的堆棧、暫存資料以及做為 I/O 的緩沖區(qū)。( 2)ROM。最低要求是 24KB,用于存放操作系統(tǒng)以及運(yùn)行環(huán)境,如 JCVM(Java 卡虛擬機(jī))。( 3)EEPROM(Electrically-Erasable Programmable Read-Only Memory)。可通過電子設(shè)備寫入數(shù)據(jù)的存儲(chǔ)器。其最低要求是 8 KB,用于儲(chǔ)存開發(fā)并裝載至 Java 卡上的 Applet。( 4)Processor。最低要求是 8bit,JAVA 卡需要至少 8 位的處理器支持。 Java 智能卡的出現(xiàn),解決了以
11、前智能卡所不能解決的問題。主要表現(xiàn)為以下幾個(gè)方面:(1)早期的智能卡的開發(fā)是復(fù)雜的過程。盡管 ISO7816 標(biāo)準(zhǔn)規(guī)定了智能卡的結(jié)構(gòu)大小和通信協(xié)議,但各個(gè)智能卡生產(chǎn)商對(duì)智能卡的研制都各不相同。各個(gè)卡生產(chǎn)商對(duì)自己的智能卡操作都有自己獨(dú)特的一套指令集。并且智能卡編程接口(API)非常復(fù)雜,為了使用該 API,開發(fā)人員需要非常熟悉低層通信接口協(xié)議,內(nèi)存管理和智能卡硬件的細(xì)節(jié)。最不方便的是,不同的智能卡沒有通用的開發(fā)環(huán)境,如果要開發(fā)一種新的應(yīng)用,那么必須重新學(xué)習(xí)一個(gè)新的開發(fā)環(huán)境。3Java 卡的出現(xiàn)為不同廠商的智能卡提供了統(tǒng)一的開發(fā)環(huán)境,95%智能卡制造商已經(jīng)支持了 Java 卡的 API。應(yīng)用 Ja
12、va 語(yǔ)言開發(fā)的智能卡程序可以應(yīng)用在所有的 Java 卡上。( 2)Java 是面對(duì)對(duì)象的編程語(yǔ)言,面向?qū)ο蟮?API 簡(jiǎn)化了 Java 卡的 Applet 與終端或后臺(tái)服務(wù)器的通信。( 3)由于智能卡程序使用 Java 語(yǔ)言,開發(fā)人員可以選擇所熟悉和喜歡的開發(fā)工具,如 JBuilder。因?yàn)榭梢赃x擇面向?qū)ο蟮拈_發(fā)工具,快速開發(fā)和調(diào)試 Java 卡的應(yīng)用程序成為了可能。在以前的智能卡開發(fā)環(huán)境中,應(yīng)用程序需要下載到卡的 ROM,而卡的 ROM 程序是無法更新的,所以調(diào)試卡的程序?qū)⒄加么罅康拈_發(fā)時(shí)間。( 4)Java 卡支持多種用途。Java 卡可以同時(shí)存在多個(gè)不同的應(yīng)用,這些應(yīng)用可以來自不同的卡
13、供應(yīng)商。例如它可以有電子錢包功能,也可以有身份鑒別功能,也可以有門禁系統(tǒng)功能。(5)Java 卡支持程序的增、刪、改操作。Java 卡上的應(yīng)用可以進(jìn)行刪除或者添加新的應(yīng)用,不需要更換新的智能卡,大大增強(qiáng)智能卡的靈活性。綜上所述,Java 卡的出現(xiàn)統(tǒng)一了智能卡的編程接口(API),統(tǒng)一了智能卡的編程語(yǔ)言(Java 語(yǔ)言),使智能卡成為統(tǒng)一標(biāo)準(zhǔn)的產(chǎn)業(yè),這便是它如何受歡迎的原因。Java 卡內(nèi)有一個(gè)能執(zhí)行 Java Applet 的虛擬機(jī),它提供 Java 卡編程的 API,使開發(fā)人員不需要了解智能卡的硬件和專用技術(shù)就可以進(jìn)行智能卡的應(yīng)用開發(fā)。Java 卡的 Applet 能夠在不同卡片的環(huán)境執(zhí)行,
14、通過虛擬機(jī)的機(jī)制來達(dá)到跨平臺(tái)的能力,這與 Java 語(yǔ)言可以跨平臺(tái)運(yùn)行的原理相同。1.5智能卡開發(fā)流程圖Java 智能卡程序的開發(fā)流程圖如圖 3 所示。.class文件.java文件java命令讀卡器JCDK平臺(tái)的converter.cap文件命令智能卡圖 32 安裝智能卡的運(yùn)行環(huán)境和運(yùn)行示例程序2.1下載智能卡的運(yùn)行環(huán)境智能卡的運(yùn)行環(huán)境包括以下文件:( 1)類包 comm.jar,該類包可以為跨平臺(tái)的信息交流提供技術(shù)服務(wù),如智能卡、聲音郵件、傳真的信息交流。 4 該類包的下載地址是 /products/javacomm/。如圖 4 所示。圖 4將下載的文件
15、解壓后,JavaCommAPI 的目錄結(jié)構(gòu)如圖 5 所示。圖 5javadocs 目 錄 是 類 包 的 說 明 文 檔 , Samples 是 信 息 交 流 技 術(shù) 的 示 例 文 件 。 可 以 在 javacomm20-win32commapi 目錄找到類包 comm.jar。( 2)OperCard Framework(OCF1.2)開發(fā)工具包下載,該工具包是由 IBM、Sun、Gemplus 等一系列公司共同開發(fā)的智能卡標(biāo)準(zhǔn)架構(gòu),這個(gè)標(biāo)準(zhǔn)應(yīng)用于各種平臺(tái)和各種語(yǔ)言,本文所介紹的智能卡開發(fā)技術(shù)就是基于這個(gè)架構(gòu)。該開發(fā)工具包的下載地址是 /in
16、dex-downloads.shtml,如圖 6 所示。圖 65找到“OpenCard Framework All-in-One”部分,如圖 7 所示。圖 7單擊“installable class file”鏈接,下載安裝的類文件(在下載之前需要注冊(cè)免費(fèi)用戶)。OCF的安裝命令是“java installOCF”。( 3)J2ME 的智能卡開發(fā)工具包 Java Card 2.2 Development Kit,該工具包由 Sun 公司提供,下載地址是 /j2me/download.html,找到 Java CardTM Technology 部分(如圖 8
17、 所示),單擊 Java Card 2.2 Development Kit 鏈接下載 JCDK 文件。圖 8智能卡的運(yùn)行環(huán)境主要由上述 3 個(gè)文件組成,這 3 個(gè)文件均可以免費(fèi)獲得。2.2安裝、設(shè)置智能卡的運(yùn)行環(huán)境智能卡運(yùn)行環(huán)境的安裝如下:( 1)將 J2ME 的智能卡開發(fā)工具包解壓,將 java_card_kit-2_2 目錄復(fù)制到某個(gè)盤符的根目錄下。CDK(Card Development Kit)的目錄結(jié)構(gòu)如圖 9 所示。 api_export_files 目錄是 JavaCard2.2 的 API 類包的輸出文件,這些文件一般很少使用到。 bin 目錄是 CDK 的執(zhí)行命令目錄,這些執(zhí)
18、行命令的使用在 3 節(jié)介紹。 doc 目錄是 CDK 的使用說明和白皮書,doc 的子目錄結(jié)構(gòu)如圖 10 所示。圖 9圖 10guides 目錄是使用說明,whitepapers 是白皮書。 lib 目錄是 CDK 的運(yùn)行類包。 samples 目錄是 CDK 示例程序。(2)進(jìn)入 OCF 文件的保存目錄(OCF 在 2.1 節(jié)的第 2 步下載),使用命令“java installOCF”安裝 OCF,安裝界面如圖 11 所示。圖 11在安裝的過程中不需要設(shè)置任何結(jié)構(gòu),當(dāng)遇到這些對(duì)話框時(shí),單擊“No”按鈕,其余的步驟單 6 擊“Next”按鈕完成 OCF 的安裝。OCF 的目錄結(jié)構(gòu)如圖 12
19、所示。圖 12 apidocs 目錄是類包的說明文檔。 components 目錄是 OCF 的結(jié)構(gòu)文件。 demos 目錄是 OCF 的示例文件。 lib 目錄是 OCF 的運(yùn)行類包。將 lib 目錄的 base-core.jar 和 base-opt.jar 類包復(fù)制到 java_card_kit-2_2lib 目錄下,因?yàn)橹悄芸ǖ某绦蛐枰褂脴?biāo)準(zhǔn)架構(gòu)的類文件。( 3)將類包 comm.jar(在 2.1 節(jié)的第 1 步下載)復(fù)制到 jdk1.3.1lib 目錄,設(shè)置包括該類包的ClassPath,如圖 13 所示。如果要使用%JAVA_HOME%變量,那么本地機(jī)器必須設(shè)置 JAVA_HO
20、ME 變量,如圖 14 所示。圖 13圖 14注意:JCDK 的支持平臺(tái)是 JDK1.3.X 版本或者更低的版本,如果使用 JDK1.4 平臺(tái),運(yùn)行 converter 命令生成 CAP 文件將出現(xiàn)錯(cuò)誤。經(jīng)過上述 3 個(gè)步驟已經(jīng)完成智能卡運(yùn)行環(huán)境的安裝,一定要正確擺放 base-core.jar 和 base-opt.jar 類包的位置和正確設(shè)置 comm.jar 的 Classpath,下面是設(shè)置智能卡的運(yùn)行環(huán)境的步驟:(1)設(shè)置 JAVA_HOME 環(huán)境變量,如圖 14 所示。設(shè)置 JAVA_HOME 的作用是可以使用%JAVA_HOME%標(biāo)識(shí)取得 JDK 的路徑。注意:如果不懂得環(huán)境變量
21、的設(shè)置步驟,請(qǐng)參考 1.2 節(jié)的內(nèi)容。(2)設(shè)置 JC_HOME 環(huán)境變量,如圖 15 所示。設(shè)置 JC_HOME 的作用和設(shè)置 JAVA_HOME 的作用相同。(3)設(shè)置 JCDK 工具包的 bin 目錄的 Path 參數(shù),如圖 16 所示。圖 15圖 16設(shè)置該路徑參數(shù)的作用是在不同的路徑下都可以運(yùn)行 CDK 的 bin 目錄的命令。通過上述 3 個(gè)步驟完成 CDK 工具包的環(huán)境設(shè)置。打開一個(gè) DOS 窗口檢查上述的參數(shù)是否正確設(shè)置。如檢查 JC_HOME 參數(shù),鍵入命令“set JC_HOME”,如圖 17 所示。圖 172.3運(yùn)行示例程序在運(yùn)行示例程序之前,應(yīng)用“jcwde versi
22、on”命令測(cè)試 CDK 平臺(tái)是否正確安裝,如圖 18 所示。7如果出現(xiàn)下述錯(cuò)誤信息,如圖 19 所示。圖 18圖 19這表示 Classpath 存在空格,如“Program files”字符,修改的辦法是使用引號(hào)“”將存在空格的路徑變量括上,如將 I:Program Filesjrelibcomm.jar 修改為“I:Program Filesjrelibcomm.jar”。在運(yùn)行示例程序之前,需要運(yùn)行 java_card_kit-2_2samples 目錄的 build_samples.bat 文件,該文件會(huì)自動(dòng)編譯 java_card_kit-2_2samplessrc目錄下的所有類。運(yùn)
23、行結(jié)果如圖 20 所示。圖 20( 1)示例程序 1,該示例使用 JavaPurse、JavaLoyalty、Wallet 三個(gè) Applet 文件,模似在一張銀行卡取錢和存錢。運(yùn)行步驟如下:(在運(yùn)行步驟使用到的命令將在 3 節(jié)進(jìn)行解釋) 打開一個(gè) DOS 窗口,進(jìn)入目錄 java_card_kit-2_2samplessrcdemo,鍵入命令 jcwde jcwde.app命令,jcwde.app 的代碼如下:/appletAIDcom.sun.javacard.installer.InstallerApplet0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0x8:0x1com
24、.sun.javacard.samples.JavaPurse.JavaPurse 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x2:0x1 com.sun.javacard.samples.JavaLoyalty.JavaLoyalty 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x5:0x1com.sun.javacard.samples.wallet.Wallet0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x6:0x1運(yùn)行結(jié)果如圖 21 所示。圖 21注意:0x 是十六進(jìn)制的表示方法,如 0x1 的十進(jìn)制數(shù)字是
25、 1,如 0xf 的十進(jìn)數(shù)字是 15,如 0xa0 的十進(jìn)制數(shù)字是 160。 另外打開一個(gè) DOS 窗口,進(jìn)入目錄 java_card_kit-2_2samplessrcdemo,鍵入命令 apdutool -nobanner -noatr demo1.scr demo1.scr.jcwde.out。 8 demo1.src 的部分代碼如下(這些代碼由 CDK 命令自動(dòng)生成,該命令在 3 節(jié)介紹):/開始處理代碼命令powerup;/create JavaPurse 創(chuàng)建 JavaPurse0x80 0xB8 0x00 0x00 0x0c 0x0a 0xa0 0x00 0x00 0x00 0x
26、62 0x03 0x01 0x0c 0x2 0x01 0x00 0x7F;/ create JavaLoyalty 創(chuàng)建 JavaLoyalty0x80 0xB8 0x00 0x00 0x0c 0x0a 0xa0 0x00 0x00 0x00 0x62 0x03 0x01 0x0c 0x5 0x01 0x00 0x7F;/create wallet applet 創(chuàng)建 wallet0x80 0xB8 0x00 0x00 0x14 0x0a 0xa0 0x0 0x0 0x0 0x62 0x3 0x1 0xc 0x6 0x1 0x08 0 0 0x05 0x010x02 0x030x04 0x05
27、 0x7F;/ Initialize Wallet 錢包初始化 /Select Wallet 選擇錢包0x00 0xA4 0x04 0x00 0x0a 0xa0 0x0 0x0 0x0 0x62 0x3 0x1 0xc 0x6 0x1 0x7F;/ 90 00 = SW_NO_ERROR/Verify user pin 檢查用戶號(hào)0x80 0x20 0x00 0x00 0x05 0x01 0x02 0x03 0x04 0x05 0x7F; /90 00 = SW_NO_ERROR/Get wallet balance 取得錢包的余額0x80 0x50 0x00 0x00 0x00 0x02;/
28、0x00 0x00 0x00 0x00 0x90 0x00 = Balance = 0 and SW_ON_ERROR/Attemp to debit from an empty account 向余額為 0 的錢包取錢,將產(chǎn)生錯(cuò)誤信息 0x80 0x40 0x00 0x00 0x01 0x64 0x7F;/0x6A85 = SW_NEGATIVE_BALANCE/Credit $100 to the empty account 向余額為 0 的錢包存錢0x80 0x30 0x00 0x00 0x01 0x64 0x7F;/0x9000 = SW_NO_ERROR/Get balance 顯示
29、余額0x80 0x50 0x00 0x00 0x00 0x02;/0x00 0x32 0x9000 = Balance = 50 and SW_NO_ERROR/ * SCRIPT END *關(guān)閉代碼的處理 powerdown;運(yùn)行結(jié)果如圖 22 所示(智能卡模擬環(huán)境只顯示 powerdown 命令的運(yùn)行結(jié)果)。圖 22apdutool 命令的運(yùn)行結(jié)果如圖 23 所示。圖 239如 果 成 功 運(yùn) 行 上 述 程 序 , java_card_kit-2_2samplessrcdemo 目 錄 將 增 加 文 件demo1.scr.jcwde.out,該文件的內(nèi)容應(yīng)該和 demo1.scr.ex
30、pected.out 文件相同,并且 SW1 和 SW2 的數(shù)字是 9000。部分內(nèi)容如下:CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2:00CLA: 80, INS: b8, P1: 00, P2: 00, Lc: 0c, 0a, a0, 00, 00, 00, 62, 03, 01, 0c, 02, 01, 00, Le: 0a, a0, 00, 00, 00, 62,03, 01, 0c, 02, 01, SW1: 90, SW2: 00
31、CLA: 80, INS: b8, P1: 00, P2: 00, Lc: 0c, 0a, a0, 00, 00, 00, 62, 03, 01, 0c, 05, 01, 00, Le: 0a, a0, 00, 00, 00, 62,03, 01, 0c, 05, 01, SW1: 90, SW2: 00CLA: 80, INS: 20, P1: 00, P2: 00, Lc: 05, 01, 02, 03, 04, 05, Le: 00, SW1: 90, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 67, SW
32、2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 02, 00, 32, SW1: 90, SW2: 00 注意:SW1 和 SW2 是返回命令的組成部分,9000 表示成功執(zhí)行命令。智能卡的信息以兩位十六進(jìn)制的數(shù)字表示。( 2)示例程序 2,該程序的運(yùn)行代碼與示例 1 的運(yùn)行代碼相同,是演示銀行卡的借錢和還錢操作,不同的是示例 1 的 JCWDE 環(huán)境不能將 Applet 下載到智能卡,示例 2 所使用的 C-JCRE 環(huán)境可以將 Applet 下載到智能卡。運(yùn)行步驟如下: 打開 DOS 窗口,進(jìn)入 java_card_kit-2_2sam
33、plessrcdemo 目錄,鍵入命令“cref -o demoee”,運(yùn)行結(jié)果如圖 24 所示。圖 24 打開另一個(gè) DOS 窗口,進(jìn)入 java_card_kit-2_2samplessrcdemo 目錄,鍵入命令 apdutool -nobanner -noatr demo2.scr demo2.scr.cref.out,如圖 25 所示,運(yùn)行結(jié)果如圖 26 所示。圖 25圖 2610如 果 demo2 程 序 成 功 運(yùn) 行 , 那 么 java_card_kit-2_2samplessrcdemo 目 錄 將 添 加 demo2.scr.cref.out 文件,該文件的內(nèi)容應(yīng)該和 d
34、emo2.scr.expected.out 文件相同,并且 SW1 和 SW2 的數(shù)字是 9000。內(nèi)容如下:CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2:00CAP file download section. Output suppressed.OUTPUT OFF;OUTPUT ON;Applet creation and functional test section.CLA: 80, INS: 20, P1: 00, P2: 00,
35、Lc: 05, 01, 02, 03, 04, 05, Le: 00, SW1: 90, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 67, SW2: 00CLA: 80, INS: 50, P1: 00, P2: 00, Lc: 00, Le: 02, 00, 32, SW1: 90, SW2: 00( 3)示例程序 3,該示例必須在示例 2 之后運(yùn)行,因?yàn)槭纠?2 的命令“cref -o demoee”輸出了 demoee 文件,示例 3 正是以該文件作為智能卡的初始狀態(tài)。示例 3 的運(yùn)行步驟如下: 打開 DO
36、S 窗口,進(jìn)入 java_card_kit-2_2samplessrcdemo 目錄,鍵入命令“cref -i demoee”,運(yùn)行結(jié)果如圖 27 所示。圖 27 打開另一個(gè) DOS 窗口,進(jìn)入 java_card_kit-2_2samplessrcdemo 目錄,鍵入命令 apdutool -nobanner -noatr demo3.scr demo3.scr.cref.out,如圖 28 所示,運(yùn)行結(jié)果如圖 29 所示。圖 28圖 29程序成功運(yùn)行后輸出文件 demo3.src.cref.out,該文件的內(nèi)容應(yīng)該和 demo3.scr.expected.out 文件相同。通過上述示例程序
37、的學(xué)習(xí),可以掌握智能卡程序的運(yùn)行操作。113 智能卡的開發(fā)工具智能卡的開發(fā)工具是 JCDK(Java Card Development Kits),JCDK 各個(gè)命令的結(jié)構(gòu)圖如圖 30 所示。JCA(Java CardAssembly)文件capgen命令J-JCRE(Java-Java CardExportRuntime Environment)基輸出文件CAP(Convertedscriptgen于Java的智能卡運(yùn)行環(huán)境Appletapdu命令執(zhí)行scriptapdutoolPackages)文件命令命令C-JCRE(C-Java CardRuntime Environment)基于co
38、nverterC語(yǔ)言的智能卡運(yùn)行環(huán)境命令Class類文件Export文件CDK使用C-JCRE環(huán)境圖 30上述結(jié)構(gòu)圖的右邊是智能卡的運(yùn)行環(huán)境,本文主要講解兩種運(yùn)行環(huán)境,一種是模擬卡運(yùn)行環(huán)境,另外一種是基于 C 語(yǔ)言的智能卡運(yùn)行環(huán)境,該運(yùn)行環(huán)境最接近真實(shí)的運(yùn)行環(huán)境。3.1jcwde 命令jcwde 命令的主要作用是啟動(dòng) JCWDE(Java Card Workstation Development Environment)智能卡開發(fā)環(huán)境,應(yīng)用該命令后系統(tǒng)將虛擬一張智能卡。開發(fā)環(huán)境不支持如下功能:( 1)類包的安裝。( 2)applet 實(shí)例的創(chuàng)建與刪除。( 3)智能卡狀態(tài)的保存。( 4)防火墻的
39、設(shè)置。( 5)事務(wù)操作。( 6)臨時(shí)數(shù)組的清除。( 7)遠(yuǎn)程方法的激活。1. jcwde 的語(yǔ)法格式 jcwde 的語(yǔ)法格式如下:jcwde -help -p port -version -nobanner 2. 參數(shù)的解釋參數(shù)的解釋如下:( 1)help:顯示幫助信息。( 2)port:設(shè)置開發(fā)環(huán)境的端口,默認(rèn)的端口是 9025。( 3)version:顯示開發(fā)環(huán)境的版本號(hào)。( 4)nobanner:在 DOS 窗口不顯示開發(fā)環(huán)境的信息。( 5)config-file:保存 Applet 名字和 AID(Application IDentifier 應(yīng)用 ID)名字的文件。Java卡利用 A
40、ID 識(shí)別 Applet,AID 的格式如表 5 所示。12表 5AID 的格式RID(Resource Identifier 供應(yīng)商 ID) PIX(Proprietary Identifier eXtention 私有擴(kuò)展 ID)5 字節(jié)0-11 字節(jié)RID 是 ISO 分配給各個(gè)卡供應(yīng)商的 ID 號(hào),它們是惟一的,而 PIX 是可以由開發(fā)者自行定義, AID 只 需 符 合 ISO7816 標(biāo) 準(zhǔn) 的 長(zhǎng) 度 規(guī) 定 , 而 無 須 向 ISO 申 請(qǐng) RID 號(hào) 。 如 類 包 com.sun.javacard.samples.JavaPurse.JavaPurse 的 AID 是 0
41、xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x2: 0x1。jcwde 的示例命令如下:( 1)jcwde version:顯示開發(fā)環(huán)境的版本號(hào)。( 2)jcwde -p 90 jcwde.app:使用端口 90 啟動(dòng) 2.3 節(jié)的示例一程序,如圖 31 所示。圖 313.2cref 命令cref 命令啟動(dòng)基于 C 語(yǔ)言的 JavaCard 運(yùn)行環(huán)境(C-JCRE),該運(yùn)行環(huán)境比 JCWDE 開發(fā)環(huán)境的功能更全面,接近真實(shí)的 Java 卡運(yùn)行環(huán)境,支持 ROM 和 EEPROM,使用 TLP-224 協(xié)議和 apdutools 命令通信。使用 cref 命令模擬的 Ja
42、va 卡可以在 EEPROM 寫入和讀出數(shù)據(jù)。說明:C-JCRE 環(huán)境支持整數(shù)變量。1. cref 的語(yǔ)法格式 cref 的語(yǔ)法格式如下: cref 可選參數(shù)該命令的所有參數(shù)都是可選的。2. 參數(shù)的解釋cref 的常用參數(shù)如下:( 1)e:顯示運(yùn)行時(shí)的錯(cuò)誤信息。( 2)h:顯示幫助信息。( 3)i :從指定的文件取得智能卡的初始狀態(tài),文件名不允許存在空格。( 4)nobanner:不顯示環(huán)境信息。( 5)o :將智能卡的狀態(tài)保存到文件,文件名不允許存在空格。( 6)p:設(shè)置通信端口號(hào)。( 7)t:逐行顯示命令的執(zhí)行情況。( 8)z:顯示資源的使用情況。cref 的示例代碼如下:( 1)cref
43、 -o demoee,初始化智能卡,并將智能卡的狀態(tài)保存到 demoee 文件。( 2)cref -i demoee,使用 demoee 文件作為智能卡的初始化狀態(tài),最后不將更新狀態(tài)保存在智能卡。( 3)cref -i demoeeIn -o demoeeOut,使用 demoeeIn 文件作為智能卡的初始化狀態(tài),最后將更新狀態(tài)保存在智能卡的文件 demoeeOut 中。cref 的運(yùn)行效果請(qǐng)參考 2.3 節(jié)的示例 2 和示例 3。3.3apdutool 命令如 1.3 節(jié)所描述,讀卡器與智能卡的通信協(xié)議是 APDU,JCDK 平臺(tái)通過命令 apdutool 向虛擬的智能卡發(fā)送命令,并且接收返
44、回命令。 13 1. apdutool 的語(yǔ)法格式 apdutool 的語(yǔ)法格式如下: apdutool 可選參數(shù)2. 參數(shù)的解釋常用的參數(shù)解釋如下:(1)h:定義主機(jī)的名字。(2)help:顯示幫助信息。(3)noatr:不顯示重置信息(answer to reset)。(4)nobanner:不顯示系統(tǒng)信息。(5)o:將 apdu 命令和返回命令保存在一個(gè)文件,如果不使用該參數(shù),DOS 窗口將顯示這些信息。( 6)p:定義讀卡器和智能卡信息交流的 TCP/IP 端口。( 7)s:定義讀卡器和智能卡信息交流的并行端口,如 COM1。( 8)version:顯示 apdutool 命令的版本信
45、息。( 9):apdu 的命令文件,apdu 的命令格式請(qǐng)參照 1.3 節(jié),apdu 的常用腳本(script)如表 6 所示。表 6 apdu 的常用腳本命令描述delay 定義暫停執(zhí)行命令的時(shí)間,時(shí)間單位是微秒echo string在輸出的文件中顯示信息output off停止信息輸出output on恢復(fù)信息輸出powerdown將關(guān)閉電源命令發(fā)給智能卡powerup將打開電源命令發(fā)給智能卡,該命令必須在執(zhí)行 apdu 命令之前執(zhí)行apdutool 的示例代碼如下:( 1)apdutool:只連接虛擬的智能卡,不執(zhí)行任何命令。( 2)apdutool -noatr -nobanner -
46、o demo1.scr.jcwde.out demo1.scr:執(zhí)行 demo1.scr 文件的命令,并且將命令和返回信息保存在 demo1.scr.jcwde.out 文件中?!皁”參數(shù)與“”符號(hào)的作用相同,但位置不同,“o”參數(shù)必須在 apdu 命令文件之前,而“”符號(hào)必須在 apdu 命令文件之后。3.4converter 命令converter 命令可以由 class 文件創(chuàng)建 CAP、EXP、JCA 三種類型的文件。1. converter 的語(yǔ)法格式 converter 的命令格式如下所示:converter 可選擇參數(shù) . converter 命 令 必 須 使 用 三 個(gè) 參
47、數(shù) , 分 別 是 package_name 、 package_aid 和.,它們的解釋如下:( 1)package_name:類包的名字,如 com.sun.javacard.samples.HelloWorld。( 2)package_aid:類包的標(biāo)識(shí),如 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1,該標(biāo)識(shí)便是上述類包的標(biāo)識(shí)。( 3).:表示類包的版本號(hào),如 1.0。需要注意的是版本號(hào)的表示必須是 2 個(gè)整數(shù)加上一個(gè)“.”號(hào)。2. 參數(shù)的解釋converter 的常用參數(shù)如下:( 1)applet :定義類包內(nèi)的 Applet 的 AID 和名字。( 2
48、)classdir:定義類包的位置,如 com.sun.javacard.samples.HelloWorld 類包,可以使用 -classdir J:java_card_kit-2_2samplessrc com.sun.javacard.samples.HelloWorld 表示類包,通過這種 14 方法,便可以在任何地方使用 converter 命令編繹該類包。( 3)d:定義輸出文件的路徑。( 4)exportmap:使用前面編繹類包的 exportpath 設(shè)置。( 5)exportpath:定義編譯需要的 EXP 文件的位置,使用 converter 命令編繹文件,需要 java.
49、lang、 javacard.framework 和 javacard.security 的 EXP 文 件 支 持 。 這 些 文 件 的 目 錄 是java_card_kit-2_2api_export_files。( 6)v 或者 version:顯示編譯時(shí)的詳細(xì)信息。( 7)nobanner:不顯示系統(tǒng)的環(huán)境信息。( 8)out CAP EXP JCA:定義輸入的文件,如果只使用 CAP,那么只輸出 CAP 文件,如果使用 3 個(gè)參數(shù),那么輸出 3 個(gè)文件。上述參數(shù)命令也可以放入一個(gè)文件,代碼如下:-out EXP JCA CAP -exportmap-applet 0xa0:0x0:
50、0x0:0x0:0x62:0x3:0x1:0xc:0x1:0x1 com.sun.javacard.samples.HelloWorld.HelloWorldcom.sun.javacard.samples.HelloWorld 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1 1.0使用 converter -config HelloWorld.opt 命令使用上述參數(shù)文件。 converter 命令的示例代碼如下:converter-out EXP JCA CAP -exportpath .classes-applet 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x1:0x1 com.sun.javacard.samples.HelloWorld.HelloWorld com.sun.javacard.samples.HelloWor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臺(tái)州2025年浙江臺(tái)州臨海市自然資源和規(guī)劃局招聘編外聘用人員筆試歷年參考題庫(kù)附帶答案詳解
- 廈門2025年福建廈門市公安文職人員服務(wù)中心招聘17人筆試歷年參考題庫(kù)附帶答案詳解
- 定制設(shè)備租賃合同范本
- 其他地區(qū)2025年新疆伊犁州直檢察機(jī)關(guān)招聘聘用制書記員26人筆試歷年參考題庫(kù)附帶答案詳解
- 佛山廣東佛山三水中學(xué)附屬初中招聘一名合同制語(yǔ)文教師筆試歷年參考題庫(kù)附帶答案詳解
- Ro4368554-生命科學(xué)試劑-MCE
- 科技引領(lǐng)未來移動(dòng)醫(yī)療應(yīng)用的發(fā)展探索
- 2025新疆機(jī)場(chǎng)(集團(tuán))有限責(zé)任公司伊寧管理分公司招聘(105人)筆試參考題庫(kù)附帶答案詳解
- 臨沂2025年山東臨沂市教育局部分事業(yè)單位招聘綜合類崗位2人筆試歷年參考題庫(kù)附帶答案詳解
- AZD-2207-生命科學(xué)試劑-MCE
- 2024年咨詢工程師考試大綱
- 免疫治療皮疹護(hù)理查房
- 小學(xué)六年級(jí)開學(xué)第一課課件二篇
- 2024年棉柔巾行業(yè)市場(chǎng)趨勢(shì)分析
- 2024年邵陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 老年期譫妄課件
- 兒童服裝設(shè)計(jì)教學(xué)目標(biāo)
- 河道保潔服務(wù)日常巡邏方案及措施
- 機(jī)械維修類設(shè)備采購(gòu)?fù)稑?biāo)方案文件技術(shù)標(biāo)
- 《工業(yè)氣體泄漏氣云紅外成像檢測(cè)系統(tǒng)的性能評(píng)價(jià)技術(shù)規(guī)范》 征求意見稿
- 解憂雜貨鋪ppt讀書分享
評(píng)論
0/150
提交評(píng)論