使用 ACR38 卡从 SLE 4442 智能卡读取数据 Reader
Reading data from SLE 4442 smart card using ACR38 Card Reader
我正在研究一个项目,从 SLE 4442 智能卡读取数据并将数据写入 SLE 4442 智能卡。 Reader 我正在使用的卡是 ACS. Following their APDU commands 的 ACR38,我能够访问卡并读取一些数据。但我怀疑我仍然无法读取内部的确切数据。这是因为,无论何时启动我的应用程序,它都会带来新数据。我真的不知道为什么会这样,有人可以在这里发现哪里出错了吗?下面是我的 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
请注意,卡中的数据每次都会更改,应用程序会重新启动。
我假设您看到的 "different" 数据并没有太多以至于它确实不同,而是您正在打印内存中的指针,Java 将其用作默认的 toString( ).我只能假设 read_data_resp.getData()
返回一个 byte[]
在这种情况下,如果您想将每个值可视化,您需要将其转换为一个字符串。如果您搜索 google 如何将字节数组转换为十六进制字符串,您会找到很多答案。
我正在研究一个项目,从 SLE 4442 智能卡读取数据并将数据写入 SLE 4442 智能卡。 Reader 我正在使用的卡是 ACS. Following their APDU commands 的 ACR38,我能够访问卡并读取一些数据。但我怀疑我仍然无法读取内部的确切数据。这是因为,无论何时启动我的应用程序,它都会带来新数据。我真的不知道为什么会这样,有人可以在这里发现哪里出错了吗?下面是我的 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
请注意,卡中的数据每次都会更改,应用程序会重新启动。
我假设您看到的 "different" 数据并没有太多以至于它确实不同,而是您正在打印内存中的指针,Java 将其用作默认的 toString( ).我只能假设 read_data_resp.getData()
返回一个 byte[]
在这种情况下,如果您想将每个值可视化,您需要将其转换为一个字符串。如果您搜索 google 如何将字节数组转换为十六进制字符串,您会找到很多答案。