【发布时间】:2016-06-30 14:23:33
【问题描述】:
在下面,您会看到一个简单的小程序,它将 0x6781 返回到带有 INS=0x70 或 INS=0x71 的传入 APDU 命令:
package testPack;
import javacard.framework.*;
public class TestApp extends Applet
{
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new TestApp().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu)
{
if (selectingApplet())
{
return;
}
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
{
case (byte)0x70:
ISOException.throwIt((short)0x6781);
break;
case (byte)0x71:
ISOException.throwIt((short)0x6781);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
}
问题是,我收到 0x6C01 到带有 INS=0x70 的 APDU 命令:
Send: 00 A4 04 00 07 01 02 03 04 05 00 00 00
Recv: 90 00
Send: 00 70 00 00 00
Recv: 6C 01
Send: 00 70 00 00 01
Recv: 01 90 00
Send: 00 71 00 00 00
Recv: 67 81
我通过接触式和非接触式接口尝试了两种不同的 Java 卡(一个是 NXP JCOP v2.4.2 r3,另一个是 KONA Java 卡),并使用两个不同的笔记本电脑通过两个不同的 IDE 生成的两个不同的 cap 文件!!! (我有多可疑?:D)但反应是平等的。
我怀疑 PCSC 或卡管理器的这种奇怪反应。因为在模拟器中,即使是 process 方法也不会调用这个特殊的 INS 值。
这有什么问题?
【问题讨论】:
标签: javacard smartcard-reader pcsc globalplatform