① java card 的aid怎么设置
底层为按照JavaCard规范实现的JavaCard平台,向上提供规范定义的接口(API),通常支持JavaCard API和GP API。
② 什么是 javacard applet
Applet是一种特殊的Java程序,它本身不能单独运行,需要嵌入在一个HTML文件中,借助浏览器或Appletviewer来解释执行.Applet可能通过网络传输,由浏览器自动装载并执行.
和Applicaton不同,Applet程序都必须继承自Java的Java.applet.Applet类或javax.swing.JApplet类
public class myApplet extends java.applet.Applet或public class myApplet extends javax.swing.JApplet
其实 JApplet类也是继承自Applet类.
要浏览Applet需要将它嵌入在网页中,只需在HTML文件中插入<APPLET>标记即可.
③ 如何获取JavaCard剩余空间
package GetFreeSpacePkg;
import javacard.framework.APDU;
import javacard.framework.ISO7816;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacard.framework.JCSystem;
/**
* 获取卡内剩余空间,包括E2P/Flash与RAM.
* 对于E2P/Flash来说,如果卡内剩余空间超过0x3FFF,则此应用返回的数据会有较小的误差。
* 测试命令:
*
* 8000000000 //get DTR
* 8001000000 //get RTR
* 8002000000 //get E2P/Flash
*
* @author [email protected]
*/
public class GetFreeSpaceApplet extends Applet {
public static void install(byte[] bArray, short bOffset, byte bLength) {
new GetFreeSpaceApplet().register(bArray, (short) (bOffset + 1),bArray[bOffset]);
}
public void process(APDU ap) {
if (selectingApplet()) {
return;
}
byte[] buf = ap.getBuffer();
int iFreeSpace=0;
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0x00://DTR
iFreeSpace = getFreeDTR();
break;
case (byte) 0x01://RTR
iFreeSpace = getFreeRTR();
break;
case (byte) 0x02://persistent
iFreeSpace = getFreePersistent();
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
JCSystem.requestObjectDeletion();
buf[3]=(byte)(iFreeSpace);
buf[2]=(byte)(iFreeSpace>>8);
buf[1]=(byte)(iFreeSpace>>16);
buf[0]=(byte)(iFreeSpace>>24);
ap.setOutgoingAndSend((short)0, (short)4);
}
/**
* 获取剩余MEMORY_TYPE_TRANSIENT_DESELECT空间
* @return
*/
public int getFreeDTR(){
//首先取得剩余空间大小
short memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);
int allmemsize = memsize;
//如果返回值为0x3FFF,则剩余空间大于此值,可继续取得剩余空间
while(memsize == (short)32767){
JCSystem.makeTransientByteArray(memsize,JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);//不存储返回的数组对象
memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);
allmemsize += memsize;
}
return allmemsize;
}
/**
* 获取剩余的MEMORY_TYPE_TRANSIENT_RESET空间
* @return
*/
public int getFreeRTR(){
//首先取得剩余空间大小
short memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
int allmemsize = memsize;
//如果返回值为0x3FFF,则剩余空间大于此值,可继续取得剩余空间
while(memsize == (short)32767){
JCSystem.makeTransientByteArray(memsize,JCSystem.MEMORY_TYPE_TRANSIENT_RESET);//不存储返回的数组对象
memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_RESET);
allmemsize += memsize;
}
return allmemsize;
}
/**
* 获取剩余的E2P/Flash空间,如果剩余空间大于0x3FFF,则此接口将创建数组,然后再获取新的剩余空间,
* 数组对象头将占用几个字节(根据对象存储结构不一样,可能占用字节数不同,一般数组头为7字节),因此存在误差。
* @return
*/
public int getFreePersistent(){
//首先取得剩余空间大小
short memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT);
int allmemsize = memsize;
//如果返回值为0x3FFF,则剩余空间大于此值,可继续取得剩余空间
while(memsize == (short)32767){
byte[] tmp=new byte[memsize]; //不存储返回的数组对象
memsize = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT);
allmemsize += memsize;
}
return allmemsize;
}
}
④ javacard工程中怎么设置包的aid
eclipse工程所在目录中手动建立Java类文件或包文件
⑤ JAVA分几个等级啊
有4个方向
j2me 做移动终端(手机)软件开发
j2ee 做企业级应用程序开发(比如基于web的管理系统版)
Java card 用于写芯片级的程序(权如单片机开发)
j2se java标准(java的基础知识,很重要,一般用来写PC程序)
⑥ java定义一个银行卡类(BankCard)以及派生类ForeignCard,LimitedCard,成员包括姓名,卡
abstract class BankCard {
protected String name;
protected String cardNo;
protected double money;
public BankCard(String name, String cardNo, double money) {
super();
this.name = name;
this.cardNo = cardNo;
this.money = money;
}
public String getName() {
return name;
}
public String getCardNo() {
return cardNo;
}
public double getMoney() {
return money;
}
public abstract void unputMoney(int someMoney);
public void putMoney(int someMoney) {
this.money += someMoney;
}
}
class ForeignCard extends BankCard {
public ForeignCard(String name, String cardNo, double money) {
super(name, cardNo, money);
}
@Override
public void unputMoney(int someMoney) {
double left = getMoney() - someMoney * 1.01;
if(left >= 0) {
super.money = left;
} else {
throw new RuntimeException("余额不足");
}
}
}
class LimitedCard extends BankCard {
public LimitedCard(String name, String cardNo, double money) {
super(name, cardNo, money);
}
@Override
public void unputMoney(int someMoney) {
if(someMoney > 1000) {
throw new RuntimeException("取款不能超过1000");
}
if(getMoney() < someMoney) {
throw new RuntimeException("余额不足");
}
super.money -= someMoney;
}
}