【发布时间】:2017-05-14 12:49:51
【问题描述】:
我可以毫无问题地从智能卡发送大部分数据。我注意到出于某种原因,我总是需要删除 APDU 中的前 6 个字节才能获取真实数据。
但是,当发送一个特定的数据时,很难知道数据在 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, 0x90, 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 是一个小消息,让中间件知道将特定数据发送回java卡。但是,我无法从中间件中检索 0x02(请参阅输出)。
-
您的命令的第一个字节(CLA 字节)设置为 0x02。这意味着您使用逻辑通道 3。这不太可能起作用,我想知道为什么第一个字节具有这样的值。响应看起来像是一个更改的命令 APDU,后面跟着响应,包括长度和状态字;我看不到对此的直接解释。然而,将 CLA 字节设置为 0x00 或 0x80 可能值得尝试。
标签: java smartcard javacard apdu