java - 从 java 智能卡 APDU 收到奇怪的数据?

标签 java smartcard javacard apdu

我可以毫无问题地从智能卡发送大部分数据。我注意到出于某种原因我总是需要删除 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() 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

有人可以帮助我理解为什么发送的数据(或在发送之前读取的数据)与实际发送的数据如此不同吗?它是某种填充吗?如何获取发送的原始数据?

最佳答案

将代码更改为:

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 };

  • 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).发送SW;

    关于java - 从 java 智能卡 APDU 收到奇怪的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43964081/

    相关文章:

    java - 有人可以解释一下这个左旋转数组代码是如何工作的吗?

    java - 如何检查智能卡上是否有小程序

    smartcard - 智能卡未响应重置

    android - Android自动识别Java Card

    java - Guava CacheBuilder 在缓存过期后不会立即调用removalListener

    java - Xmlpull Java,解析互联网上的xml文件

    在 MIFARE DESFire EV1 卡上创建应用程序

    java - 性能指标: Java vs JavaCard

    netbeans - 从智能卡发送/接收数据

    java - 用户修改的复杂决策系统 - Java