使用ACR38读卡器从SLE 4442智能卡读取数据

时间:2016-02-27 23:27:53

标签: java smartcard smartcard-reader

正致力于一个项目,用于读取和写入SLE 4442智能卡的数据。我正在使用的读卡器是来自ACS的ACR38。在APDU commands之后,我可以访问该卡并读取一些数据。但我怀疑我仍然无法读取内部的确切数据。这是因为,无论何时我的应用程序启动,它都会带来新数据。我真的不知道为什么这样做,有人可以在这里发现错误吗?下面是我的Java代码:

CardChannel channel = card.getBasicChannel(); byte[] read_memory_card = {(byte) 0xFF, (byte) 0xB0, (byte) 0xA7A6A5A4, (byte) 0xA3A2A1A0, (byte) 0x00}; ResponseAPDU read_data_resp = channel.transmit(new CommandAPDU(read_memory_card)); if (read_data_resp.getSW1() == 0x90 && read_data_resp.getSW2() == 0x00) { System.out.println("Data in Card: " + read_data_resp.getData() + "and SW1: " + read_data_resp.getSW1()); }

我得到的结果是:
卡片数据:[B @ 378bf509和 SW1 :144

请注意,卡中的数据每次都会更改,应用程序会重新启动。

1 个答案:

答案 0 :(得分:1)

我假设您看到的“不同”数据并不是真正的不同,而是您在内存中打印出Java用作默认toString()的指针。我只能假设margin返回read_data_resp.getData(),在这种情况下,如果您想要将每个值转换为字符串,则需要将其转换为字符串。如果你搜索谷歌如何将字节数组转换为十六进制字符串,你会发现很多答案。