北郵java智能卡實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三電子錢包(一)_第1頁(yè)
北郵java智能卡實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三電子錢包(一)_第2頁(yè)
北郵java智能卡實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三電子錢包(一)_第3頁(yè)
北郵java智能卡實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三電子錢包(一)_第4頁(yè)
北郵java智能卡實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三電子錢包(一)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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卡電子錢包程序一、實(shí)驗(yàn)?zāi)康慕ava卡電子錢包程序,并進(jìn)行java卡程序的編譯和調(diào)試二、實(shí)驗(yàn)設(shè)備 PC機(jī)、智能卡讀卡器、Java卡三、實(shí)驗(yàn)內(nèi)容1、建立一個(gè)JavaCard工程2、編寫(xiě)電子錢包應(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è)電子錢包小應(yīng)用程序,應(yīng)該至少能夠?qū)崿F(xiàn)以下功能:電子錢包的安裝、選擇與撤銷選擇、存款、借款、獲取錢包余額以及身份驗(yàn)證。2、流程圖繪制A、總體框圖B、存款模塊圖 C、消費(fèi)模塊圖 D、PI

2、N驗(yàn)證模塊圖 E、查詢余額模塊圖 五、關(guān)鍵代碼部分A、PIN的次數(shù)判斷public boolean select()/在選擇錢包應(yīng)用之前,對(duì)pin可嘗試次數(shù)進(jìn)行判斷,若可嘗試次數(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對(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是否能為錢包應(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);/錢包應(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)度的存錢交易 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)行存錢交易,余額是否超出允許最大值 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;/取即將消費(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);/判斷錢包余額是否大于消費(fèi)的數(shù)額,即錢包是否透支balance=(short)(balance-debitAmount);/

10、若滿足以上條件,最后更改錢包余額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) /錢包應(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); /判斷錢包余額是否大于消費(fèi)的數(shù)額,即錢包是否透支 if(short)(balance-debitAmount)<(short)0) ISOException.throwIt(SW_NEGATIVE_BALANCE); /若以上條件全部滿足,最后更改錢包余額 balance=(short)(balance-debitAmount);六、測(cè)試數(shù)據(jù)部分運(yùn)行:select card:驗(yàn)證時(shí)錯(cuò)誤密碼:驗(yàn)證時(shí)密碼正確:存錢55:取錢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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論