【问题标题】:Retrieving and displaying value from Read Block APDU command smartcardio从 Read Block APDU 命令 smartcardio 检索和显示值
【发布时间】:2014-01-20 14:27:33
【问题描述】:

我正在开发一个基于 RFID 的考勤监控系统。我使用 Mifare 1k Classic 作为我的 RFID 和 ACR122u 作为我的阅读器。我了解到您可以使用 STORE VALUE BLOCK APDU 命令将值存储到卡中,也可以使用 READ BLOCK APDU 命令读取。两个命令都返回 0x90 SW1,表示传输成功。我的问题是如何在读取后获取/检索存储到 VALUE BLOCK 的值。例如,我从块 0x05 中存储了一个值“15”。现在我尝试从块 0x05 中获取值“15”。我在这里尝试了这些代码:

CommandAPDU comm1 = new CommandAPDU(new byte[] {(byte) 0xFF,(byte) 0xB1,(byte) 0x00,(byte) 0x05,(byte) 0x04});
ResponseAPDU read1 = channel.transmit(comm1);

它成功读取了块,但它不显示值。我尝试使用:

System.out.println(read1.getBytes());
System.out.println(read1.getData());

但两者都显示一些随机输出,例如:[B@140fee

谁能帮我解决这个问题?输出是什么意思?

【问题讨论】:

    标签: java mifare apdu smartcard-reader contactless-smartcard


    【解决方案1】:

    输出[B@140fee由对象的toString()方法生成(使用println()方法打印任意对象时会隐式调用该方法。[表示该对象是数组类型对象。@987654325 @ 表示数组的元素类型是Byte@ 符号后面的十六进制数字是对象的哈希码的十六进制表示(对象的hashCode() 方法返回的任何数字。

    因此,为了查看您收到的字节,您需要将字节数组转换为可读的字符串表示形式(例如,每个字节值的串联十六进制表示形式)。

    【讨论】:

    • 谢谢!这很有帮助。我真的对getBytes() 的输出一无所知。但是是否有可能从Read Value Block APDU 命令得到Read Value Reponse Format?例如我存储了一个值“15”来阻止编号。 5. 所以APDU命令是FF B1 00 05 04,响应应该是00 00 00 0F 90 00。如何使用 java 获得此响应?我阅读了 ACS ACR122U API 手册。
    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多