我可以从智能卡发送大部分数据,没有问题。我注意到我总是需要删除APDU中的前6个字节以获得真实数据。从java智能卡APDU接收到奇怪的数据?
但是,当发送一个特定的数据时,很难知道数据在APDU中的什么位置。
这是Java智能卡模拟器的代码:
data = new byte[] {(byte)0x6302};
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);
预期要发送/接收的数据是:
{0X2}
然而,数据在中间件响应APDU中收到的是:
responseApdu.getData():
{0x80的,0x32,为0x0,为0x0,0x8中,为0x0,为0x0,0x1,则0x5c,为0x6,0xf9,0x63,0x33,为0x1,0X2,0×90,为0x0}
我也尝试记录由Java卡模拟器发送的APDU;它是如下的数据:
SendAPDU()数据(apdu.getBuffer()):
{0X2,0x32,为0x0,为0x0,0x8中,为0x0,为0x0,0x1,则0x5c,为0x6,0xf9 ,0x63,0x33,为0x0,......(这一点毕竟为0x0)}
偏移CDATA:5
有人可以帮我理解为什么派(或读取,甚至在发送之前)的数据与实际发送的数据是如此不同?它是一种填充吗?我如何获得原始数据?
您的语句'data = new byte [] {(byte)0x6302};'创建一个只有一个字节元素0x02的字节数组。它真的是你想要的吗? – nandsito
@nandsito这是一个让中间件知道将特定数据发送回java卡的小消息。但是,我无法从中间件检索0x02(请参阅输出)。 –
您的命令的第一个字节(CLA字节)设置为0x02。这意味着你使用逻辑通道3.这不是可能的工作,我想知道为什么第一个字节有这样的价值。响应看起来像一个改变后的命令APDU,后面是响应,包括长度和状态字;我没有看到对此的直接解释。然而,将CLA字节设置为0x00或0x80可能值得尝试。 –