正在处理项目以读取和写入数据到SLE 4442智能卡。我使用的读卡器是ACS的ACR38。在他们的APDU commands之后,我可以访问卡并读取一些数据。但我怀疑我仍然无法读取里面的确切数据。这是因为,无论何时我的应用程序启动,它都会带出新的数据。我真的不知道为什么会出现这种情况,有人可以发现哪里出错了吗?下面是我的Java代码:使用ACR38读卡器从SLE 4442智能卡读取数据读卡器
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
请注意,数据卡每次更改时,应用程序都会重新启动。
你为什么要把'0xA7A6A5A4'作为一个字节?这只会发送读者'0xA4'。 “0xA3A2A1A0”也一样。你也应该输出sw1作为十六进制,但你已经知道sw1是0x90,因为你的if语句。 –
@RobertSnyder,我看到了写在手册上的文字。我从来不知道它可以轻松压缩。感谢您的更正 –
您是否正在查看第4.6.2节的内容?如果是这样,那么你做错了。我不确定如何阅读他们提出的问题,但他们指的是这些位。因此,您要求提供地址1010 1010,如果我正在阅读正确的文件'1000 000'具有特殊含义。 –