北邮java智能卡实验报告实验三电子钱包(一)
北邮2012级智能卡系统实验报告

实验三Java卡电子钱包程序一、需求分析设计简单的电子钱包应用程序,使其在智能卡上能够实现安装、选择、撤销选择、充值、消费、显示余额和进行身份验证的功能。
二、设计1、系统结构图2、各部分程序流程图充值流程消费流程PIN 验证余额查询三、 测试数据1、身份验证2、充值3、取款4、其他测试数据否704000000102 预期结果:cla value not supported80700000 预期结果: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智能卡的开发流程有了更为直观地了解,因为课本上有相应的代码可以参考,所以这次实验并没有遇到什么困难。
基于MIFARE智能卡的电子钱包系统的设计1

基于MIFARE智能卡的电子钱包系统的设计摘要电子钱包是电子商务购物活动中常用的一种支付工具,成其适于小额购物。
随着我国信息化建设的逐步深入,特别是电子商务、电子政务的普及,电子支付手段越发显得重要。
目前智能卡在安全系统和电子商务的研究和应用成为各方研究的热点。
本文对智能卡的关键理论与安全技术进行研究,对基于智能卡的电子钱包的实用性、公平性等方面进行了有益的探索,设计了基于智能卡的电子钱包的基本模型,并予以实现,并从实际应用角度出发,给出一个可以在低计算能力、低存储量的硬件智能卡上实现离线电子支付的应用设计。
关键词:MIFARE、智能卡、电子钱包Based on the Electronic Purse MIFARE Smart CardSystem DesignAbstractElectronic purse is e-commerce shopping activities in a common payment tool, As it is suitable for small shopping. With the development of information construction,especially the popularization of electronic commercial and electronic government information security becomes more and more important.The technology of digital signature becomes the research focus these days,which is the most effective way of assuring the information integrality and none repudiation.The goal for this thesis is mainly to make a description about the knowledge of software and hardware of smart card,especially about the internal structure,file organization and some key operations. In the light of the characteristics for key storage,information confidentiality and message authentication of smart card,it is emphasized on that the improved security smart card offers in the real world.Key Words: MIFARE、Smart card、Electronic purse1 前言1.1智能卡的电子钱包国内外现状1.1.1智能卡的发展智能卡的名称来源于英文名词“Smart Card,又称集成电路卡,它将一个集成电路芯片镶嵌于塑料基片中,封装成为卡的形式。
Java实验三实验报告1

淮海工学院计算机工程学院实验报告书课程名:《Java语言实验与课程设计指导》题目:实验3——深入面向对象编程班级:学号:姓名:实验题目:1.定义一个学生类,定义一个大学生类和小学生类,这两个类是学生类的子类;定义一个选课接口,由大学生类实现该接口,定义一个年龄异常处理,当小学生年龄小于7岁时,弹出异常。
2.定义一个银行卡类,定义一个信用卡类和普通银行卡类,这两个类是银行卡类的子类;定义一个透支的接口,信用卡可以透支,普通银行卡不可以透支。
定义一个取款异常和透支异常,当普通银行卡取款超过银行卡余额时,弹出“取款异常”;当信用卡透支超过2万元时弹出“透支异常”。
实验代码:题1源代码:import java.awt.*;class student{String number,name,sex,bj;int age;student(String xuehao,String xingming,String xingbie,int nianling,String banji){number=xuehao;name=xingming;sex=xingbie;age=nianling;bj=banji;}}interface xuanke{abstract void select(String s);}interface illegal{abstract void illegal(int s);}class primary extends student implements illegal{String xx;primary(String xuehao,String xingming,String xingbie,int nianling,String banji,String xiaoxue){super(xuehao,xingming,xingbie,nianling,banji);}public void illegal(int s){age=s;if(age<7)System.out.println("\n出错~学生"+name+" 的年龄过小!");}}class college extends student implements xuanke{String dx,xk;college(String xuehao,String xingming,String xingbie,int nianling,String banji,String daxue){super(xuehao,xingming,xingbie,nianling,banji);dx=daxue;}public void select(String s){xk=s;}}public class test_1{public static void main(String args[]){primary p1=new primary("1","张三","男",13,"五(1)班","ZZZ小学");System.out.println(p1.number+" "++" "+p1.sex+" "+p1.age+" "+p1.bj+" "+p1.xx);p1.illegal(p1.age);primary p2=new primary("\n2","小红","女",6,"一(1)班","YYY小学");System.out.println(p2.number+" "++" "+p2.sex+" "+p2.age+" "+p2.bj+" "+p2.xx);p2.illegal(p2.age);college c1=new college("3","小茗","女",20,"软件112","XXX大学");c1.select("现代密码学");System.out.print("\n"+c1.number+" "++" "+c1.sex+" "+c1.age+" "+c1.bj+" "+c1.dx+" "+c1.xk+"\n");}}实验结果:题2源代码:import java.util.*;class bankcard{String kh,name;double yue;bankcard(String kahao,String yezhu,double shengyu) {kh=kahao;name=yezhu;yue=shengyu;}}interface touzhi{abstract void tz(double s);abstract void tzye(double s);abstract void illegal();}interface qkillegal{abstract void illegal();}class common extends bankcard implements qkillegalcommon(String kahao,String yezhu,double shengyu){super(kahao,yezhu,shengyu);}public void warning(){System.out.println("普通银行卡不可透支!");}public void illegal(){System.out.println("取款超额!");}}class xinyongka extends bankcard implements touzhi{double tzye;xinyongka(String kahao,String yezhu,double shengyu){super(kahao,yezhu,shengyu);}public void tz(double s){tzye=s;}public void tzye(double s){double t=20000+yue-s;if(s>yue)System.out.println(t);}public void illegal(){System.out.println("透支超额!");}}public class test_3{public static void main(String args[]){common c1=new common("62226200240001916658","张三",1200.00);System.out.println("卡号:"+c1.kh+"业主:"++"余额:"+c1.yue);System.out.println("请输入取款金额:");Scanner s1=new Scanner(System.in);double b=s1.nextDouble();if(b<c1.yue){double c=c1.yue-b;System.out.println("银行卡余额为:"+c);}elsec1.illegal();System.out.println("\n\n");xinyongka x1=new xinyongka("62236200243008615559","李四",500.00);System.out.println("卡号:"+x1.kh+"业主:"++"余额:"+x1.yue);System.out.println("信用卡可透支!透支金额为20000元!");System.out.println("请输入要取款金额:");Scanner s2=new Scanner(System.in);double a=s2.nextDouble();if(a<=x1.yue){double d=x1.yue-a;System.out.println("银行卡余额为:"+d);}else if(a>x1.yue&&a<=(20000+x1.yue)){System.out.println("透支余额剩余:");x1.tzye(a);}elsex1.illegal();}}实验结果:普通银行卡类:输入普通银行卡取款金额若输入金额小于余额则若大于余额则信用卡类:输入取款金额,若输入金额小于余额则若输入金额大于余额小于透支金额与余额之和,则若大于透支金额与余额之和,则。
电子钱包应用安全性测试报告

电子钱包应用安全性测试报告1. 引言电子钱包应用作为一种方便快捷的支付方式,已经被广泛应用于各行各业。
然而,随着电子钱包应用的普及,其安全性问题也日益突出。
为了评估电子钱包应用的安全性,本报告基于测试结果提供了详细的分析和建议。
2. 测试方法为了全面评估电子钱包应用的安全性,我们采用了以下测试方法:2.1 漏洞扫描测试:通过使用自动化工具对应用程序进行扫描,检查是否存在已知的漏洞和安全弱点。
2.2 身份认证测试:测试应用程序的用户身份认证机制,包括密码强度、双因素认证等。
2.3 信息加密测试:验证应用程序是否对用户的敏感信息进行适当的加密和保护。
2.4 安全更新测试:评估应用程序的安全更新机制,包括及时修复漏洞和推送安全补丁的能力。
3. 测试结果和分析3.1 漏洞扫描测试结果:经过漏洞扫描测试,我们发现应用程序存在以下漏洞和安全弱点:SQL注入漏洞、跨站脚本攻击、不安全的API接口等。
3.2 身份认证测试结果:应用程序的身份认证机制较为薄弱,密码强度要求较低,缺乏双因素认证等增强安全性的措施。
3.3 信息加密测试结果:应用程序在传输用户敏感信息时未采用足够的加密措施,存在信息泄露的风险。
3.4 安全更新测试结果:应用程序缺乏及时推送安全更新的能力,漏洞修复速度较慢。
4. 安全建议根据我们的测试结果和分析,我们提出以下安全建议以改善电子钱包应用的安全性:4.1 修复漏洞和强化安全措施:针对发现的漏洞和安全弱点,及时进行修复,并加强应用程序的安全措施,如加强密码强度要求、实施双因素认证、限制不安全的API接口等。
4.2 强化用户身份认证:改进身份认证机制,增加双因素认证等措施,提升用户的身份认证安全性。
4.3 加强信息加密保护:采用适当的加密算法对用户敏感信息进行加密传输,避免信息泄露的风险。
4.4 及时推送安全更新:建立健全的安全更新机制,及时修复漏洞并推送安全补丁,保障用户信息的安全性。
5. 结论通过对电子钱包应用的安全性进行全面测试和评估,我们发现存在一些安全问题。
Java智能卡集成测试系统的设计与实现开题报告

Java智能卡集成测试系统的设计与实现开题报告一、选题背景智能卡是指内置有处理器、存储器和安全模块等各种硬件安全机制的卡式电子设备,具有安全性高、可移动性好、信息存储容量大等特点,在金融、通信、交通等领域得到广泛应用。
Java智能卡是指使用Java语言开发的智能卡,其开发过程和维护相对容易,利用Java语言的特性,能够开发出高度安全、可靠性和可维护性的智能卡应用程序。
Java智能卡需要经过严格的集成测试才能确保其功能的正确性和稳定性。
目前,市场上已经有一些实现Java智能卡集成测试的工具,如OpenSC、JCCT、Smart Card Shell等,但这些工具都有不同程度的局限性,如测试覆盖面不够广、测试用例不够丰富、集成测试结果难以分析等。
因此,本文拟设计实现一款功能完备、易用方便的Java智能卡集成测试系统,以提高Java智能卡的开发效率和产品质量。
二、研究内容本文的主要研究内容为设计和实现一款Java智能卡集成测试系统,其主要包括以下几个方面:1.测试框架设计:针对Java智能卡的特点和应用场景,设计一个适合的测试框架,包括测试用例库、测试脚本生成、测试用例执行、结果分析等模块。
通过模拟智能卡的运行环境,对智能卡应用程序进行集成测试。
2.测试用例覆盖率:通过分析当前Java智能卡应用程序的特点和常见问题,设计一套全面、合理的测试用例库,覆盖Java智能卡应用程序的各个功能模块和常见错误。
3.性能测试:针对Java智能卡的性能瓶颈,设计性能测试用例,测试Java智能卡的响应速度、处理吞吐量、并发性等性能指标。
4.易用性设计:为了方便用户使用,设计简洁明了、易用方便的用户界面,支持测试结果的可视化展示和分析。
三、研究方法本文采用如下研究方法:1.需求分析:通过调研Java智能卡的应用场景和常见问题,分析用户需求和功能特点,确定测试用例覆盖范围。
2.测试框架设计:根据Java智能卡的应用特点,设计测试框架,包括测试用例库、测试脚本生成、测试用例执行、结果分析等模块。
北邮java智能卡实验报告3des加解密

智能卡技术实验报告学院:电子工程学院班级:2011211204姓名:学号:2011210986实验四 Java卡对称加密解密程序一、实验目的:建立Java卡3DES算法的加密解密程序,并进行Java卡程序的编译和调测。
二、实验设备:PC机,智能卡读卡器,Java卡。
三、实验内容:1.建立一个JavaCard工程2.编写3DES算法的加解密应用代码3.使用智能卡模拟器对应用代码进行调试4.使用Java卡对应用代码进行编译测试四、实验报告:1.设计一个3DES算法的加密解密小应用程序2.画出系统结构图和各部分程序流程图3.完成程序的开发,然后再在Java卡上进行验证五、流程图系统结构流程:各部分流程图1)产生随机明文流程图2)3DES加密流程图3)3DES解密流程图六、演示模拟器随机产生8字节的明文:D4AA3503EC117A56,用时:1113us加密,密文:DCC74C5B43340FB7,用时:8445us解密,用时:6338us插卡产生明文:09FED7DA8FC3B90F,用时:83990us加密,产生密文:A447987D6FF5CC2C,用时:682482us解密,用时:641494us可以看出,插卡后比直接用模拟器,加密解密的时间长了很多。
七、实验总结通过本次智能卡实验,我了解了对称加密的一些相关概念与知识,并学会了如何在智能卡上实现对称加解密。
八、源代码package desthree;import javacard.framework.*;import javacard.security.*;import javacardx.crypto.*;public class Desthree extends Applet{byte [] Random;byte [] ciphertext=new byte[256];byte [] translation=new byte[256];private DESKey deskey;Cipher CipherObj;private byte [] keyData1={0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};//密钥private byte [] keyData2={0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};private byte [] keyData3={0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28};protected Desthree(){register();}public static void install(byte [] bArray, short bOffset, byte bLength){new Desthree();}public void process(APDU apdu)throws ISOException{byte [] buffer = apdu.getBuffer();if((buffer[ISO7816.OFFSET_CLA])==0 && (buffer[ISO7816.OFFSET_INS])==(byte)(0xa4))return;if(buffer[ISO7816.OFFSET_INS]==(byte)0x84){getRandom();//返回生成的8字节随机数Util.arrayCopyNonAtomic(Random, (short)0, buffer, (short)0, (short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET_INS]==(byte)0x83){apdu.setIncomingAndReceive();encrypt(buffer); //加密Util.arrayCopyNonAtomic(ciphertext, (short)16, buffer, (short)0, (short)8);apdu.setOutgoingAndSend((short)0,(short)8);}if(buffer[ISO7816.OFFSET_INS]==(byte)0x82){apdu.setIncomingAndReceive();doAuthentication(buffer); //解密}}//执行加密过程的代码private void encrypt(byte [] buffer){deskey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES,KeyBuilder.LENGTH_DES,false);deskey.setKey(keyData1, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(buffer, (short)5, (short)8, ciphertext, (short)0);deskey.setKey(keyData2, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(ciphertext, (short)0, (short)8, ciphertext, (short)8);deskey.setKey(keyData3, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(ciphertext, (short)8, (short)8, ciphertext, (short)16);}//执行解密过程的代码private void doAuthentication(byte [] buffer){deskey = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES,KeyBuilder.LENGTH_DES,false);deskey.setKey(keyData3, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(buffer, (short)5, (short)8, translation, (short)0);deskey.setKey(keyData2, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_ENCRYPT);CipherObj.doFinal(translation, (short)0, (short)8, translation, (short)8);deskey.setKey(keyData1, (short)0);CipherObj = Cipher.getInstance(Cipher.ALG_DES_CBC_ISO9797_M1, false);CipherObj.init(deskey, Cipher.MODE_DECRYPT);CipherObj.doFinal(translation, (short)8, (short)8, translation, (short)16);if(Util.arrayCompare(translation, (short)16, Random, (short)0, (short)8)!=0)ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);}//获取随机数private void getRandom(){if(Random==null)Random = JCSystem.makeTransientByteArray((short)8,JCSystem.CLEAR_ON_DESELECT);RandomData ICC = RandomData.getInstance((byte)RandomData.ALG_PSEUDO_RANDOM);ICC.setSeed(Random, (short)0, (short)8);ICC.generateData(Random, (short)0, (short)8);}}。
Java智能卡的安全性分析与研究的开题报告
Java智能卡的安全性分析与研究的开题报告一、选题背景和意义随着电子商务和电子政务的发展,智能卡作为一种安全存储和处理个人身份信息的设备越来越受到关注。
在智能卡应用中,Java智能卡作为一种支持Java语言的智能卡,在安全性、灵活性和可移植性等方面具有很大的优势。
但是,Java智能卡的安全性也面临着各种挑战和风险,如攻击、破解、仿冒等。
因此,本文旨在对Java智能卡的安全性进行分析和研究,探讨Java智能卡的安全性问题,寻找解决Java智能卡安全性问题的方法和途径。
二、研究内容和方法本文主要包括以下内容:1. Java智能卡的基本原理和架构分析。
介绍Java智能卡的基本结构和内部组成部分,了解Java智能卡的运作原理,为后续的安全性分析奠定基础。
2. Java智能卡的攻击类型和方式。
介绍常见的Java智能卡攻击类型和攻击方式,包括侧信道攻击、功耗分析攻击、时间攻击等。
探讨攻击的原理、漏洞来源以及攻击的防范策略。
3. Java智能卡的安全性评估与测试。
详细介绍Java智能卡的安全性评估与测试方法,包括黑盒测试、白盒测试、灰盒测试等。
对Java智能卡进行全面的测试和评估,提高Java智能卡的安全性。
基于以上内容,本文将采用文献调研、实验分析、案例研究等方法,结合相关理论,对Java智能卡的安全性进行深入研究和分析。
三、预期研究成果通过本文的研究,将得到以下成果:1. 深入了解Java智能卡的安全性问题和现状,分析Java智能卡的攻击类型和方式,为Java智能卡的安全性问题提供更为全面的认识。
2. 研究Java智能卡的安全性评估与测试方法,构建Java智能卡的安全性评估测试模型,提出Java智能卡的安全性测试标准和方法。
3. 结合实验分析和案例研究,寻找解决Java智能卡的安全性问题的方法和途径,提高Java智能卡的安全性,为智能卡应用的安全性提供重要的参考和指导。
四、研究进度安排1. 文献调研和研究综述:2周。
智能卡电子钱包系统
智能卡电子钱包系统1.系统简介目前,银行、交通和服务行业大量使用磁卡作为信用卡、储蓄卡、收费卡、优惠卡使用,由于磁卡存储的信息少,信息易受外界环境如强磁场影响而遭破坏,磁卡的安全保密性也较差,易被伪造等等,使磁卡的使用受到限制。
发卡机构往往花费大量人力物力力求杜绝诸如恶意透支、使用假冒卡、使用被盗卡等事件的发生,但仍防不胜防。
另一方面,由于磁卡在使用时一般地都要求在查询主机止付名单和主帐户余额(大多数情况下信用卡也要求联机使用),所以,对通讯的要求很高。
诸多因素制约着磁卡的进一步拓展使用,这在客观上要求开发出一种更新的方式取代磁卡。
2.系统结构2.1计算机用户数目:10000持卡人,建议配置为:PIII2G*2way,512M以上内存,18G以上硬盘空间。
2.2网络公共电话网(PSTN)2.3读写设备采用Spectra S9000/iPOS、采用Gemplus MPCOS智能卡3.系统总体设计3.1主机系统运行智能卡管理系统,包括:智能卡管理、帐务处理、业务批处理、止付名单管理、特约商户管理、特约储蓄所管理、终端管理、会计科目管理、业务统计、系统维护等十三项功能模块。
3.2前置机管理传输密钥、拆解及装配通讯数据包、检查交易的合法性、记录交易流水、记录交易日志、交易数据导向(金卡联网)等等。
3.3发卡系统在智能卡表面打印凸字或印刷卡号,对IC芯片进行个人化,即将个人资料写入芯片,同时产生持卡人密码(PIN),打印密码信封。
IC卡读写设备可采用带IC卡读写功能的打卡机如LC540V打卡机或印制机如TP950印制发卡机,也可采用单张卡片作业的IC卡读写卡器。
➢IC POS采用Spectra S9000/iPOS。
作为直接处理交易的终端设备,按商户和储蓄网点分别开放不同的交易处理功能。
商户POS可处理的交易包括:消费购物、退货、撤消消费、交易补登、查询余额等;储蓄网点POS可处理的交易包括:存款、取款、圈存、转帐(包括与用卡或银行帐户的转帐)、代缴费、交易补登、余额查询、更改持卡人PIN等。
电子支付工具实验报告
电子支付工具实验报告1. 引言电子支付是指通过互联网、移动设备等电子渠道进行资金支付的方式。
近年来,随着移动互联网的快速发展以及人们对于线上购物的普及,电子支付工具越来越受到用户的青睐。
为了了解电子支付工具的工作原理以及使用体验,我们进行了一系列的实验。
本实验报告将以支付宝和微信支付这两种电子支付工具为例,介绍它们的功能特点、使用方式以及我们的实验结果。
通过实验,我们希望能够更好地了解电子支付工具对日常生活的便利性和安全性。
2. 实验过程与方法我们首先下载并安装了支付宝和微信支付这两个应用程序。
然后,我们注册并绑定了自己的银行卡,以便实现账户充值和支付功能。
为了评估支付工具的功能特点,我们进行了以下实验:1. 账户充值实验:我们使用银行卡向支付宝和微信支付账户进行充值,并记录充值金额、充值时间以及充值是否成功。
2. 支付实验:我们使用支付宝和微信支付进行线上和线下支付,并记录支付金额、支付时间以及支付是否成功。
3. 转账实验:我们使用支付宝和微信支付进行账户间的转账操作,并记录转账金额、转账时间以及转账是否成功。
3. 结果与分析3.1 账户充值实验在账户充值实验中,我们成功地将银行卡中的资金充值到支付宝和微信支付账户中。
两种支付工具均提供了多种充值方式,例如银行卡充值、支付宝余额充值、微信红包充值等。
充值过程简单方便,且充值到账时间较快,一般在几分钟之内即可完成。
3.2 支付实验在支付实验中,我们用支付宝和微信支付进行了多次线上和线下支付。
无论是扫码支付、商户收款码支付还是在电商平台上购物,支付流程都非常简单且迅速。
我们的支付记录显示,支付宝和微信支付的支付成功率均在99%以上,且支付时间短暂。
3.3 转账实验在转账实验中,我们进行了几次账户间的转账操作,包括向好友转账以及向自己的银行卡进行转账。
我们发现支付宝和微信支付在转账操作方面都提供了多种方式,例如扫码转账、手机号码转账等。
转账成功率也非常高,且转账时间快速,一般在几秒钟之内即可完成。
《 网上支付与结算 》实验报告三
《 网上支付与结算 》实验报告三
……………………………………………装……………………………………订……………………………………线……………………………………………………………
(2)在客户端首页点击我要付款业务——输入付款金额(最低付款金额为20元。
)——获取短信验证码——确认付款——向客户反馈我要收款业务中需要的授权码短信。
(3)已注册的客户在客户端首页点击我要收款业务——输入收款金额——付款人手机号——授权码(消费者付款后反馈的授权码短信)——确认收款。
此项操作收取收款人1.5%的手续费。
输入所支持银行的信用卡卡号——输入还款金额(最低10元)——输入交易密码——获取短信验证码——确认还款(还款后工作日到账)。
此项操作的手续费。
(5)手机充值页面中输入所需充值手机号——选择充值金额——交易密码——短信验证码——确认充值。
此项业务收取的手续费
(6)支付宝充值页面选择充值金额——输入交易密码——确认付款——付款后系统自动生成淘宝充值码以手机短信的形式反馈消费者——由消费者自行登录支付宝账户出入充值码进行充值。
此项业务手续费,2元起收。
(7)进入我要旅行界面——查询所需航班信息——确定选定航班——系统自动生成订单号——以短信的形式反馈消费者——消费者在30分钟内与新华旅行网客服联系并进行支付。
5. 当前的电子钱包还存在哪些不足
(1)电子钱包发行方备付金管理缺乏有效约束
由于相关约束机制尚不健全,目前电子钱包发行方对客户备付金的管理主要依赖自律,潜在风险不容忽视。
为了消除客户对备付金被挪用的疑虑,很多电子钱包。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能卡技术实验报告学院:电子工程学院班级:2011211204学号:**********姓名:实验三 Java卡电子钱包程序一、实验目的建立Java卡电子钱包程序,并进行java卡程序的编译和调试二、实验设备PC机、智能卡读卡器、Java卡三、实验内容1、建立一个JavaCard工程2、编写电子钱包应用代码3、使用卡模拟器对应用代码进行编译调试4、使用Java卡对应用代码进行编译调试四、实验设计1、实验说明设计一个电子钱包小应用程序,应该至少能够实现以下功能:电子钱包的安装、选择与撤销选择、存款、借款、获取钱包余额以及身份验证。
2、流程图绘制A、总体框图B、存款模块图C、消费模块图D、PIN验证模块图E、查询余额模块图五、关键代码部分A、PIN的次数判断public boolean select(){//在选择钱包应用之前,对pin可尝试次数进行判断,若可尝试次数为零,即钱包已锁定,则该钱包应用不能被选择if(pin.getTriesRemaining()==0)return false;return true;}public void deselect(){//当钱包应用被取消选择是,将pin的状态清空为初始值pin.reset();}B、APDU入口public void process(APDU apdu) {byte[] buffer=apdu.getBuffer();/*APDU对象为JCRE临时入口点对象,它可以被任何应用所访问,负责传递终端发送的APDU命令。
通过APDU.getBuffer()命令即可以得到APDU对象的通信缓冲区,即APDU命令数组*/buffer[ISO7816.OFFSET_CLA]=(byte)(buffer[ISO7816.OFFSET_CLA]&(byt e)0xFC);//判断命令头是否正确if((buffer[ISO7816.OFFSET_CLA]==0)&&(buffer[ISO7816.OFFSET_INS]== (byte)(0xA4)))return;//若为select命令,则直接返回,不做其他操作if(buffer[ISO7816.OFFSET_CLA]!=Wallet_CLA)ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);/*若为其他命令,则判断命令CLA和INS是否能为钱包应用所支持,若为支持范围外的其他值,则返回对象的错误状态字*/switch (buffer[ISO7816.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.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);}}C、存款模块private void credit(APDU apdu){if(!pin.isValidated())ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);//钱包应用鉴权byte[] buffer=apdu.getBuffer();byte numBytes=(byte)(buffer[ISO7816.OFFSET_LC]);//取命令LC,并将之存储在numBytes中byte byteRead =(byte)(apdu.setIncomingAndReceive());/*接收APDU 命令数据,并将之存储在APDU通信缓冲区的ISO7816.OFFSET.CDATA处,接着5字节的APDU命令头*/if((numBytes!=1)||(byteRead!=1))//判断LC是否为1,否则抛出异常。
本应用只支持一个字节长度的存钱交易ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);byte creditAmount =buffer[ISO7816.OFFSET_CDATA];//取将存入的值if ((creditAmount>MAX_TRANSACTION_AMOUNT)||(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(!pin.isValidated())ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);//钱包应用鉴权byte[] buffer=apdu.getBuffer();byte numBytes=(byte)(buffer[ISO7816.OFFSET_LC]);byte byteRead=(byte)(apdu.setIncomingAndReceive());if((numBytes!=1)||(byteRead!=1))ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);byte debitAmount =buffer[ISO7816.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);//判断钱包余额是否大于消费的数额,即钱包是否透支balance=(short)(balance-debitAmount);//若满足以上条件,最后更改钱包余额}private void getBalance(APDU apdu){byte[] buffer = apdu.getBuffer();short le = apdu.setOutgoing();/*设置通信传输方向为卡片到终端,同时也表示卡片运行结束,准备发送命令响应给终端,其中le为APDU命令中的LE,表示终端要求卡片返回的响应数据的长度*/if(le<2)ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);apdu.setOutgoingLength((byte)2);//设置卡片发送数据的实际长度buffer[0] = (byte)(balance >> 8);//复制余额数据到APDU缓冲区中,准备发送给终端buffer[1] = (byte)(balance & 0xFF);apdu.sendBytes((short)0,(short)2);//调用通信函数发送余额数据}private void verify(APDU apdu){byte[] buffer = apdu.getBuffer();byte byteRead =(byte)(apdu.setIncomingAndReceive());//接收终端发送的PIN数据,并将之存储到APDU通信缓冲区中if(pin.check(buffer,ISO7816.OFFSET_CDATA,byteRead)==false)//判断终端数据的PIN是否和卡片内的PIN相符ISOException.throwIt(SW_VERIFICATION_FAILED);}}D、消费模块代码private void debit(APDU apdu) {//钱包应用鉴权if(!pin.isValidated())ISOException.throwIt(SW_PIN_VERIFICATION_REQUIRED);byte[]buffer=apdu.getBuffer();byte numByetes=(byte)(buffer[ISO7816.OFFSET_LC]);byte byteRead=(byte)(apdu.setIncomingAndReceive());if((numByetes!=1)||byteRead!=1)ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);//取即将消费的值byte debitAmount=buffer[ISO7816.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);//若以上条件全部满足,最后更改钱包余额balance=(short)(balance-debitAmount);}六、测试数据部分运行:select card:验证时错误密码:验证时密码正确:存钱55:取钱30:查询发现剩余25:密码输入错误卡被锁定:没有验证即存款:验证成功后超额取款:存款超额:原款57,存入99超额后再查询余额依旧是57:原款57,超额取款后在查询余额依旧是57:七、实验总结本次实验需要我们对照课本上的代码进行修改和敲定。
通过绘制流程图完成设计部分内容,我们更好地理顺了电子钱包的设计思路及完成相应功能的模块划分。
在实验过程中虽然遇到了一些困难,但经过与课本仔细对照反复调试,最终使问题得到了解决。