




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上智能卡技術(shù)實(shí)驗(yàn)報(bào)告 學(xué)院: 電子工程學(xué)院班級(jí): 學(xué)號(hào): 姓名: 實(shí)驗(yàn)三 Java卡電子錢(qián)包程序一、實(shí)驗(yàn)?zāi)康慕ava卡電子錢(qián)包程序,并進(jìn)行java卡程序的編譯和調(diào)試二、實(shí)驗(yàn)設(shè)備 PC機(jī)、智能卡讀卡器、Java卡三、實(shí)驗(yàn)內(nèi)容1、建立一個(gè)JavaCard工程2、編寫(xiě)電子錢(qián)包應(yīng)用代碼3、使用卡模擬器對(duì)應(yīng)用代碼進(jìn)行編譯調(diào)試4、使用Java卡對(duì)應(yīng)用代碼進(jìn)行編譯調(diào)試四、實(shí)驗(yàn)設(shè)計(jì)1、實(shí)驗(yàn)說(shuō)明 設(shè)計(jì)一個(gè)電子錢(qián)包小應(yīng)用程序,應(yīng)該至少能夠?qū)崿F(xiàn)以下功能:電子錢(qián)包的安裝、選擇與撤銷(xiāo)選擇、存款、借款、獲取錢(qián)包余額以及身份驗(yàn)證。2、流程圖繪制A、總體框圖B、存款模塊圖 C、消費(fèi)模塊圖 D、PI
2、N驗(yàn)證模塊圖 E、查詢余額模塊圖 五、關(guān)鍵代碼部分A、PIN的次數(shù)判斷public boolean select()/在選擇錢(qián)包應(yīng)用之前,對(duì)pin可嘗試次數(shù)進(jìn)行判斷,若可嘗試次數(shù)為零,即錢(qián)包已鎖定,則該錢(qián)包應(yīng)用不能被選擇if(pin.getTriesRemaining()=0)return false;return true;public void deselect()/當(dāng)錢(qián)包應(yīng)用被取消選擇是,將pin的狀態(tài)清空為初始值pin.reset();B、APDU入口public void process(APDU apdu) byte buffer=apdu.getBuffer();/*APDU對(duì)象
3、為JCRE臨時(shí)入口點(diǎn)對(duì)象,它可以被任何應(yīng)用所訪問(wèn),負(fù)責(zé)傳遞終端 發(fā)送的APDU命令。通過(guò)APDU.getBuffer()命令即可以得到APDU對(duì)象的通信緩沖區(qū), 即APDU命令數(shù)組*/bufferISO7816.OFFSET_CLA=(byte)(bufferISO7816.OFFSET_CLA&(byte)0xFC);/判斷命令頭是否正確if(bufferISO7816.OFFSET_CLA=0)&&(bufferISO7816.OFFSET_INS=(byte)(0xA4)return;/若為select命令,則直接返回,不做其他操作if(bufferISO7816
4、.OFFSET_CLA!=Wallet_CLA)ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);/*若為其他命令,則判斷命令CLA和INS是否能為錢(qián)包應(yīng)用所支持, 若為支持范圍外的其他值,則返回對(duì)象的錯(cuò)誤狀態(tài)字*/switch (bufferISO7816.OFFSET_INS) case GET_BALANCE: getBalance(apdu);return;case DEBIT:debit(apdu);return;case CREDIT:credit(apdu);return;case VERIFY:verify(apdu);ret
5、urn;default:ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);C、存款模塊private void credit(APDU apdu)if(!pin.isValidated()ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);/錢(qián)包應(yīng)用鑒權(quán)byte buffer=apdu.getBuffer();byte numBytes=(byte)(bufferISO7816.OFFSET_LC);/取命令LC,并將之存儲(chǔ)在numBytes中byte byteRead =(byte)(apd
6、u.setIncomingAndReceive();/*接收APDU命令數(shù)據(jù),并將之存儲(chǔ)在APDU通信緩沖區(qū)的ISO7816.OFFSET.CDATA處,接著5字節(jié)的APDU命令頭*/if (numBytes!=1)|(byteRead!=1)/判斷LC是否為1,否則拋出異常。本應(yīng)用只支持一個(gè)字節(jié)長(zhǎng)度的存錢(qián)交易 ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); byte creditAmount =bufferISO7816.OFFSET_CDATA;/取將存入的值 if (creditAmount>MAX_TRANSACTION_AMOUNT
7、)|(creditAmount<0)/判斷交易額是否滿足要求 ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT); if (short)(balance+creditAmount)>MAX_BALANCE)/判斷若進(jìn)行存錢(qián)交易,余額是否超出允許最大值 ISOException.throwIt(SW_EXCEED_MAXIMUM_BALANCE); balance = (short)(balance + creditAmount);/若以上條件全部滿足,則更新錢(qián)包余額private void debit(APDU apdu)if(!
8、pin.isValidated()ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);/錢(qián)包應(yīng)用鑒權(quán)byte buffer=apdu.getBuffer();byte numBytes=(byte)(bufferISO7816.OFFSET_LC);byte byteRead=(byte)(apdu.setIncomingAndReceive();if(numBytes!=1)|(byteRead!=1)ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);byte debitAmount =bufferI
9、SO7816.OFFSET_CDATA;/取即將消費(fèi)的值if(debitAmount>MAX_TRANSACTION_AMOUNT)|(debitAmount<0)ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);/判斷交易額度是否滿足要求if(short)(balance-debitAmount)<(short)0)ISOException.throwIt(SW_NEGATIVE_BALANCE);/判斷錢(qián)包余額是否大于消費(fèi)的數(shù)額,即錢(qián)包是否透支balance=(short)(balance-debitAmount);/
10、若滿足以上條件,最后更改錢(qián)包余額private void getBalance(APDU apdu) byte buffer = apdu.getBuffer(); short le = apdu.setOutgoing();/*設(shè)置通信傳輸方向?yàn)榭ㄆ浇K端,同時(shí)也表示卡片運(yùn)行結(jié)束,準(zhǔn)備 發(fā)送命令響應(yīng)給終端,其中l(wèi)e為APDU命令中的LE,表示終端要求卡片返回的 響應(yīng)數(shù)據(jù)的長(zhǎng)度*/ if(le<2) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); apdu.setOutgoingLength(byte)2);/設(shè)置卡片發(fā)送數(shù)據(jù)的實(shí)際長(zhǎng)度 bu
11、ffer0 = (byte)(balance >> 8);/復(fù)制余額數(shù)據(jù)到APDU緩沖區(qū)中,準(zhǔn)備發(fā)送給終端 buffer1 = (byte)(balance & 0xFF); apdu.sendBytes(short)0,(short)2);/調(diào)用通信函數(shù)發(fā)送余額數(shù)據(jù)private void verify(APDU apdu)byte buffer = apdu.getBuffer(); byte byteRead =(byte)(apdu.setIncomingAndReceive();/接收終端發(fā)送的PIN數(shù)據(jù),并將之存儲(chǔ)到APDU通信緩沖區(qū)中 if(pin.check
12、(buffer,ISO7816.OFFSET_CDATA,byteRead)=false)/判斷終端數(shù)據(jù)的PIN是否和卡片內(nèi)的PIN相符 ISOException.throwIt(SW_VERIFICATION_FAILED);D、消費(fèi)模塊代碼private void debit(APDU apdu) /錢(qián)包應(yīng)用鑒權(quán)if(!pin.isValidated()ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);bytebuffer=apdu.getBuffer();byte numByetes=(byte)(bufferISO7816.OFFSE
13、T_LC);byte byteRead=(byte)(apdu.setIncomingAndReceive();if(numByetes!=1)|byteRead!=1) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); /取即將消費(fèi)的值 byte debitAmount=bufferISO7816.OFFSET_CDATA; /判斷消費(fèi)交易額度是否滿足要求 if(debitAmount>MAX_TRANSACTION_AMOUNT)|debitAmount<0) ISOException.throwIt(SW_INVALID_TRANS
14、ACTION_AMOUNT); /判斷錢(qián)包余額是否大于消費(fèi)的數(shù)額,即錢(qián)包是否透支 if(short)(balance-debitAmount)<(short)0) ISOException.throwIt(SW_NEGATIVE_BALANCE); /若以上條件全部滿足,最后更改錢(qián)包余額 balance=(short)(balance-debitAmount);六、測(cè)試數(shù)據(jù)部分運(yùn)行:select card:驗(yàn)證時(shí)錯(cuò)誤密碼:驗(yàn)證時(shí)密碼正確:存錢(qián)55:取錢(qián)30:查詢發(fā)現(xiàn)剩余25:密碼輸入錯(cuò)誤卡被鎖定:沒(méi)有驗(yàn)證即存款:驗(yàn)證成功后超額取款:存款超額:原款57,存入99超額后再查詢余額依舊是57:原款57,超額取款后在查詢余額依舊是57:七、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)需要我們對(duì)照課本上的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江職業(yè)學(xué)院《司法法律社會(huì)工作》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆大學(xué)《水資源系統(tǒng)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海立信會(huì)計(jì)金融學(xué)院《數(shù)據(jù)挖掘與智能分析雙語(yǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西旅游職業(yè)學(xué)院《用戶界面設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧省交通高等??茖W(xué)?!堆b飾工程計(jì)量與計(jì)價(jià)設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東茂名農(nóng)林科技職業(yè)學(xué)院《建筑設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東舞蹈戲劇職業(yè)學(xué)院《基礎(chǔ)醫(yī)學(xué)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年福建省安全員考試題庫(kù)及答案
- 廣西工業(yè)職業(yè)技術(shù)學(xué)院《器樂(lè)合奏2》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025貴州省安全員-B證考試題庫(kù)附答案
- 【人教版】《勞動(dòng)教育》七上 勞動(dòng)項(xiàng)目一 疏通廚房下水管道 課件
- 2024特斯拉的自動(dòng)駕駛系統(tǒng)FSD發(fā)展歷程、技術(shù)原理及未來(lái)展望分析報(bào)告
- 2024-2030年中國(guó)銀行人工智能行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 五屆全國(guó)智能制造應(yīng)用技術(shù)技能大賽數(shù)字孿生應(yīng)用技術(shù)員(智能制造控制技術(shù)方向)賽項(xiàng)實(shí)操樣題
- 中國(guó)銀行中銀數(shù)字服務(wù)(南寧)有限公司招聘筆試真題2023
- 2024七年級(jí)英語(yǔ)下冊(cè) Module 1 Lost and found教案(新版)外研版
- 2024年公共衛(wèi)生基本知識(shí)考試題庫(kù)(附含答案)
- 如何正確運(yùn)用邏輯推理和論證方法撰寫(xiě)文章
- 《垃圾發(fā)電廠爐渣處理技術(shù)規(guī)范》
- 法律基礎(chǔ)知識(shí)500題及參考答案(滿分必刷)
- 環(huán)境空氣氣態(tài)污染物(SO2、NO2、O3、CO)連續(xù)自動(dòng)監(jiān)測(cè)系統(tǒng)安裝驗(yàn)收技術(shù)規(guī)范(HJ 193-2013部分代替 HJ-T 193-2005)
評(píng)論
0/150
提交評(píng)論