北邮2012级智能卡系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三Java卡电子钱包程序
一、需求分析
设计简单的电子钱包应用程序,使其在智能卡上能够实现安装、选择、撤销选择、充值、消费、显示余额和进行身份验证的功能。
二、设计
1、系统结构图
2、各部分程序流程图
充值流程消费流程
PIN 验证
余额查询
三、 测试数据
1、身份验证
2、充值
3、取款
4、其他测试数据
否
704000000102 预期结果:cla value not supported
80700000 预期结果:INS value not supported
余额为0时输入804000000107 预期结果:6A85
输错三次密码后select 预期结果:select failed
余额为0x7FFF时输入803000000107 预期结果:6A84
四、关键代码
1、判断是否可选中
if(pin.getTriesRemaining()==0){
return false;
}//判断是否可选中
2、判断是否操作金额合法
if(creditAmount>MAX_TRANSACTION_AMOUNT || creditAmount<0){
ISOException.throwIt(SW_INVALID_TRANSACTION_AMOUNT);
}
if((short)(creditAmount+balance)>MAX_BALANCE){
ISOException.throwIt(SW_EXCEED_MAXIMUM_BALANCE);
}
3、显示余额
apdu.setOutgoingLength((byte)2);
buffer[0]=(byte)(balance>>8);
buffer[1]=(byte)(balance & 0xFF);
apdu.sendBytes((short)0, (short)2);
4、判断权限
if(!pin.isValidated()){
ISOException.throwIt(SW_VERIFICATION_REQUIRED);
}
5、判断输入数据的长度
if(numBytes!=1 || byteRead!=1){
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
}
五、实际结果
五、实验总结
这次实验通过对电子钱包程序的编写,对于java智能卡的开发流程有了更为直观地了解,因为课本上有相应的代码可以参考,所以这次实验并没有遇到什么困难。
测试程序时,需要我们对程序的功能有比较好的理解,才能不遗漏得测试程序。
总而言之,这次实验为之后的实验打下了很好的基础。