可以使用Sun提供的JCDK下的软仿工具搭建一个模拟环境
使用软件:
JCDK3.0.4_ClassicEdition
jdk1.6.0_13
以JCDK自带的Sample下的Wallet为例,对于Wallet稍微加改动,添加一条配置Pin的命令。
final static byte SET_PIN = (byte) 0x60;
private void Set_Pin(APDU apdu)
{
byte lc=(byte)apdu.setIncomingAndReceive();
pin.update(apdu.getBuffer(),ISO7816.OFFSET_CDATA,lc);
}
第一步:编译源文件
javac -g -d . Wallet.java
第二步:生成Cap
%JC_CLASSIC_HOME%\bin\converter.bat -out CAP EXP JCA -exportpath %JC_CLASSIC_HOME%\api_export_files -applet 0xAA:0xBB:0x10:0x00:0x00:0x00:0x11:0x12:0x13 Wallet com.sun.jcclassic.samples.wallet 0xAA:0xBB:0x10:0x00:0x00:0x00:0x11:0x12:0x14 1.0
第三步:生成脚本
%JC_CLASSIC_HOME%\bin\scriptgen.bat -o wallet.scr wallet.cap
打开脚本在最前面添加
//power up
powerup;
//select applet
0x00 0xa4 0x04 0x00 0x09 0xAA 0xBB 0x10 0x00 0x00 0x00 0x11 0x12 0x13 0x7F;
最后面添加
//powerdown
powerdown;
第四步:生成Imge
打开两个Dos窗口,在其中一个Dos窗口中输入
%JC_CLASSIC_HOME%\bin\cref.bat -o wallet.img
第二个Dos窗口输入:
%JC_CLASSIC_HOME%\bin\apdutool wallet.scr
这时候Imge就形成了。
第五步:测试Image
调用Image
%JC_CLASSIC_HOME%\bin\cref.bat -i wallet.img
发测试代码:
先编写一个测试脚本walletTest.scr,然后使用下面命令发送。
发送脚本的命令
%JC_CLASSIC_HOME%\bin\apdutool -o result.txt walletTest.scr
创建的新测试脚本模版
*******
//powerup
powerup;
//create applet
0x80 0xB8 0x00 0x00 0x0a 0x09 0xAA 0xBB 0x10 0x00 0x00 0x00 0x11 0x12 0x13 0x7F;
//select applet
0x00 0xa4 0x04 0x00 0x09 0xAA 0xBB 0x10 0x00 0x00 0x00 0x11 0x12 0x13 0x7F;
//get balance
0x80 0x50 0x00 0x00 0x00 0x7F;
//set pin
0x80 0x60 0x00 0x00 0x03 0x01 0x02 0x03 0x7F;
//verify pin
0x80 0x20 0x00 0x00 0x03 0x01 0x02 0x03 0x7f;
//credit
0x80 0x30 0x00 0x00 0x01 0x20 0x7f;
//get balance
0x80 0x50 0x00 0x00 0x00 0x7F;
//debit
0x80 0x40 0x00 0x00 0x01 0x10 0x7f;
//get balance
0x80 0x50 0x00 0x00 0x00 0x7F;
//powerdown
powerdown;
********
注意:
1://create applet
0x80 0xB8 0x00 0x00 0x0a 0x09 0xAA 0xBB 0x10 0x00 0x00 0x00 0x11 0x12 0x13 0x7F;
使用的是LV结构,0x09 0xAA 0xBB 0x10 0x00 0x00 0x00 0x11 0x12 0x13 0x7F;
0x09是AID的长度,后面就是AID
2:0x7F是结束标志