




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、智能卡技術(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、PIN驗證模塊圖 E、查詢余額
2、模塊圖 五、關(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()/當(dāng)錢包應(yīng)用被取消選擇是,將pin的狀態(tài)清空為初始值pin.reset();B、APDU入口public void process(APDU apdu) byte buffer=apdu.getBuffer();/*APDU對象為JCRE臨時入口點對象,
3、它可以被任何應(yīng)用所訪問,負(fù)責(zé)傳遞終端 發(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.OFFSET_CLA!=Wallet_CLA)IS
4、OException.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);return;default:ISOException.t
5、hrowIt(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)(apdu.setIncomingAndReceive();
6、/*接收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 (creditAmountMAX_TRANSACTION_AMOUNT)|(creditAmountMAX_BALANCE)/判斷
7、若進行存錢交易,余額是否超出允許最大值 ISOException.throwIt(SW_EXCEED_MAXIMUM_BALANCE); balance = (short)(balance + creditAmount);/若以上條件全部滿足,則更新錢包余額private void debit(APDU apdu)if(!pin.isValidated()ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);/錢包應(yīng)用鑒權(quán)byte buffer=apdu.getBuffer();byte numBytes=(byte)(bufferISO7816
8、.OFFSET_LC);byte byteRead=(byte)(apdu.setIncomingAndReceive();if(numBytes!=1)|(byteRead!=1)ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);byte debitAmount =bufferISO7816.OFFSET_CDATA;/取即將消費的值if(debitAmountMAX_TRANSACTION_AMOUNT)|(debitAmount0)ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);/判斷交易額
9、度是否滿足要求if(short)(balance-debitAmount)(short)0)ISOException.throwIt(SW_NEGATIVE_BALANCE);/判斷錢包余額是否大于消費的數(shù)額,即錢包是否透支balance=(short)(balance-debitAmount);/若滿足以上條件,最后更改錢包余額private void getBalance(APDU apdu) byte buffer = apdu.getBuffer(); short le = apdu.setOutgoing();/*設(shè)置通信傳輸方向為卡片到終端,同時也表示卡片運行結(jié)束,準(zhǔn)備 發(fā)送命令響
10、應(yīng)給終端,其中l(wèi)e為APDU命令中的LE,表示終端要求卡片返回的 響應(yīng)數(shù)據(jù)的長度*/ if(le 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ù),并將之存儲到APDU通信緩沖區(qū)中
11、 if(pin.check(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)(buffer
12、ISO7816.OFFSET_LC);byte byteRead=(byte)(apdu.setIncomingAndReceive();if(numByetes!=1)|byteRead!=1) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); /取即將消費的值 byte debitAmount=bufferISO7816.OFFSET_CDATA; /判斷消費交易額度是否滿足要求 if(debitAmountMAX_TRANSACTION_AMOUNT)|debitAmount0) ISOException.throwIt(SW_INVALID_
13、TRANSACTION_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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能化相變儲能墻體材料施工與節(jié)能效果評估合同
- 物聯(lián)網(wǎng)物聯(lián)網(wǎng)工程師崗位培訓(xùn)及聘用合同
- 網(wǎng)紅甜品區(qū)域代理合同及品牌加盟管理協(xié)議
- 高端定位商業(yè)地產(chǎn)投資基金股權(quán)投資協(xié)議
- 環(huán)保型工業(yè)設(shè)備融資租賃綠色擔(dān)保合同
- 大型基礎(chǔ)設(shè)施項目風(fēng)險控制及預(yù)防措施
- 2025年口腔清潔護理用品項目立項申請報告
- 2025年貴金屬化合物相關(guān)基礎(chǔ)化學(xué)品項目規(guī)劃申請報告
- 2025年離子風(fēng)槍項目規(guī)劃申請報告模范
- 2025年醫(yī)療康復(fù)器材項目立項申請報告
- 年輕干部廉潔教育心得體會六篇
- 【MOOC】考古發(fā)現(xiàn)與中國文化-浙江大學(xué) 中國大學(xué)慕課MOOC答案
- 患者走失的護理應(yīng)急預(yù)案
- 車隊安全操作手冊
- 河北對口單招第十類職業(yè)適應(yīng)性測試(計算機)-第四章文字處理軟件應(yīng)用課件-
- 廣東省廣州市2024年中考道德與法治試卷(含答案)
- 電力行業(yè)技術(shù)服務(wù)合同
- 2025年中國陪診服務(wù)行業(yè)現(xiàn)狀、發(fā)展環(huán)境及投資前景分析報告
- 駕駛員安全培訓(xùn)課件
- 5.1 《法不可違 》 課件 -2024-2025學(xué)年統(tǒng)編版道德與法治八年級上冊
- 高考作文如何做到立意新穎深刻公開課獲獎?wù)n件省賽課一等獎?wù)n件
評論
0/150
提交評論