【问题标题】:Strange data received from java smart card APDU?从java智能卡APDU收到的奇怪数据?
【发布时间】: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


【解决方案1】:

将代码更改为:

data = new byte[] {(byte) 0x63, (byte) 0x02}; 
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);

数据字节 { 0x63, 0x02 } 将被发送出去。

以及您在问题中提到的数据:

  1. 响应 APDU 数据为:
responseApdu.getData():
{0x80, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x1, 0x2, 0x90, 0x0}

表示命令数据为:{ 0x80, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x1};,响应数据为:{ 0x2, 0x90, 0x0 }

  1. apdu 缓冲区是:
SendAPDU() data (apdu.getBuffer()):
{0x2, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x0, ..... (all 0x0 after this point)}
Offset CDATA: 5

表示将发送数据字节0x02(发送长度为1个字节),在此字节之后发送SW 0x9000({0x90,0x00})。传出时不使用偏移量 CDATA。 APDU缓冲区中的其他数据字节是您的APDU命令,第一个字节被传出字节覆盖(这里只有1个字节,0x02)。

注意: APDU.sendBytesLong(data, offset, length)的处理过程:

1)。将具有偏移量和长度的数据复制到 APDU 缓冲区;

2)。使用 APDU 缓冲区发送数据;

3)。发送软件;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多