版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上智能卡技術(shù)實驗報告 學(xué)院: 電子工程學(xué)院班級: 學(xué)號: 姓名: 實驗三 Java卡電子錢包程序一、實驗?zāi)康慕ava卡電子錢包程序,并進行java卡程序的編譯和調(diào)試二、實驗設(shè)備 PC機、智能卡讀卡器、Java卡三、實驗內(nèi)容1、建立一個JavaCard工程2、編寫電子錢包應(yīng)用代碼3、使用卡模擬器對應(yīng)用代碼進行編譯調(diào)試4、使用Java卡對應(yīng)用代碼進行編譯調(diào)試四、實驗設(shè)計1、實驗說明 設(shè)計一個電子錢包小應(yīng)用程序,應(yīng)該至少能夠?qū)崿F(xiàn)以下功能:電子錢包的安裝、選擇與撤銷選擇、存款、借款、獲取錢包余額以及身份驗證。2、流程圖繪制A、總體框圖B、存款模塊圖 C、消費模塊圖 D、PI
2、N驗證模塊圖 E、查詢余額模塊圖 五、關(guān)鍵代碼部分A、PIN的次數(shù)判斷public boolean select()/在選擇錢包應(yīng)用之前,對pin可嘗試次數(shù)進行判斷,若可嘗試次數(shù)為零,即錢包已鎖定,則該錢包應(yīng)用不能被選擇if(pin.getTriesRemaining()=0)return false;return true;public void deselect()/當錢包應(yīng)用被取消選擇是,將pin的狀態(tài)清空為初始值pin.reset();B、APDU入口public void process(APDU apdu) byte buffer=apdu.getBuffer();/*APDU對象
3、為JCRE臨時入口點對象,它可以被任何應(yīng)用所訪問,負責傳遞終端 發(fā)送的APDU命令。通過APDU.getBuffer()命令即可以得到APDU對象的通信緩沖區(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是否能為錢包應(yīng)用所支持, 若為支持范圍外的其他值,則返回對象的錯誤狀態(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);/錢包應(yīng)用鑒權(quán)byte buffer=apdu.getBuffer();byte numBytes=(byte)(bufferISO7816.OFFSET_LC);/取命令LC,并將之存儲在numBytes中byte byteRead =(byte)(apd
6、u.setIncomingAndReceive();/*接收APDU命令數(shù)據(jù),并將之存儲在APDU通信緩沖區(qū)的ISO7816.OFFSET.CDATA處,接著5字節(jié)的APDU命令頭*/if (numBytes!=1)|(byteRead!=1)/判斷LC是否為1,否則拋出異常。本應(yīng)用只支持一個字節(jié)長度的存錢交易 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)/判斷若進行存錢交易,余額是否超出允許最大值 ISOException.throwIt(SW_EXCEED_MAXIMUM_BALANCE); balance = (short)(balance + creditAmount);/若以上條件全部滿足,則更新錢包余額private void debit(APDU apdu)if(!
8、pin.isValidated()ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);/錢包應(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;/取即將消費的值if(debitAmount>MAX_TRANSACTION_AMOUNT)|(debitAmount<0)ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);/判斷交易額度是否滿足要求if(short)(balance-debitAmount)<(short)0)ISOException.throwIt(SW_NEGATIVE_BALANCE);/判斷錢包余額是否大于消費的數(shù)額,即錢包是否透支balance=(short)(balance-debitAmount);/
10、若滿足以上條件,最后更改錢包余額private void getBalance(APDU apdu) byte buffer = apdu.getBuffer(); short le = apdu.setOutgoing();/*設(shè)置通信傳輸方向為卡片到終端,同時也表示卡片運行結(jié)束,準備 發(fā)送命令響應(yīng)給終端,其中l(wèi)e為APDU命令中的LE,表示終端要求卡片返回的 響應(yīng)數(shù)據(jù)的長度*/ if(le<2) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); apdu.setOutgoingLength(byte)2);/設(shè)置卡片發(fā)送數(shù)據(jù)的實際長度 bu
11、ffer0 = (byte)(balance >> 8);/復(fù)制余額數(shù)據(jù)到APDU緩沖區(qū)中,準備發(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ù),并將之存儲到APDU通信緩沖區(qū)中 if(pin.check
12、(buffer,ISO7816.OFFSET_CDATA,byteRead)=false)/判斷終端數(shù)據(jù)的PIN是否和卡片內(nèi)的PIN相符 ISOException.throwIt(SW_VERIFICATION_FAILED);D、消費模塊代碼private void debit(APDU apdu) /錢包應(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); /取即將消費的值 byte debitAmount=bufferISO7816.OFFSET_CDATA; /判斷消費交易額度是否滿足要求 if(debitAmount>MAX_TRANSACTION_AMOUNT)|debitAmount<0) ISOException.throwIt(SW_INVALID_TRANS
14、ACTION_AMOUNT); /判斷錢包余額是否大于消費的數(shù)額,即錢包是否透支 if(short)(balance-debitAmount)<(short)0) ISOException.throwIt(SW_NEGATIVE_BALANCE); /若以上條件全部滿足,最后更改錢包余額 balance=(short)(balance-debitAmount);六、測試數(shù)據(jù)部分運行:select card:驗證時錯誤密碼:驗證時密碼正確:存錢55:取錢30:查詢發(fā)現(xiàn)剩余25:密碼輸入錯誤卡被鎖定:沒有驗證即存款:驗證成功后超額取款:存款超額:原款57,存入99超額后再查詢余額依舊是57:原款57,超額取款后在查詢余額依舊是57:七、實驗總結(jié) 本次實驗需要我們對照課本上的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 婚禮現(xiàn)場燈光與音響布置方案
- 定制家具售后服務(wù)優(yōu)化方案
- 廚房櫥柜定制安裝工程實施方案
- 礦山機械設(shè)備管理與維護方案
- 長者情緒關(guān)懷與調(diào)節(jié)方案
- 藥學(xué)專業(yè)醫(yī)院實習(xí)報告
- 外貿(mào)主管崗位招聘筆試題及解答(某大型央企)2024年
- 電氣工程及其自動化創(chuàng)新實踐報告
- 婚禮舞蹈排練場地布置方案
- 零售行業(yè)人效任務(wù)化管理方案
- 廣東省揭陽市揭西縣2023-2024學(xué)年高二上學(xué)期期末數(shù)學(xué)試題
- 幼兒園市場調(diào)查報告
- 逾期付款違約賠償金承諾書
- 材料酸洗加工合同
- 大疆企業(yè)技術(shù)發(fā)展分析及啟示以創(chuàng)新驅(qū)動未來
- 人教部編版語文七年級上冊第二單元作業(yè)設(shè)計
- 預(yù)防患者自殺應(yīng)急預(yù)案課件
- 包裝方案設(shè)計
- 企業(yè)勞動用工法律風(fēng)險防范實務(wù)與操作技巧
- 小學(xué)科學(xué)教科版六年級上冊全冊課課練(含答案)(2023秋)
- 護理實訓(xùn)室文化墻建設(shè)方案
評論
0/150
提交評論