可以使用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是結束標誌