gpt4 book ai didi

android - 如何解读 Mifare Classic 1K 上的 NDEF 内容

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:41 25 4
gpt4 key购买 nike

我使用 Android 设备上的 NFC 工具应用程序(通过内置的 NFC 阅读器)将文本写入 Mifare Classic 1K 标签。这段文字是“moretto”(我的姓氏)。

然后,我尝试使用 NFC 阅读器 ACR1255U 和 ACS 提供的库来阅读此文本(NDEF 格式)。

我能够得到以下信息:

读取 block 4:FF B0 00 04 10 响应:0000030ED1010A5402656E6D6F726574 9000

读取 block 5:FF B0 00 05 10 响应:746FFE00000000000000000000000000 9000

我知道 FE 表示内容结束,6D6F726574746F 是我的文本。但是我如何确定文本从哪里开始呢?我很难理解 NXP 文档中描述的 TLV 格式。

最佳答案

首先,NXP 专有的 MIFARE Classic 标签的 NDEF 映射在这两个应用笔记中指定:

正如您已经发现的 (Unable to authenticate to a MIFARE Classic tag used as NDEF tag),NDEF 数据存储在某些扇区的数据 block 中(NDEF 扇区,通过 MIFARE Application Directory 标记)。因此,与 NDEF 相关的数据是来自这些 block 的所有数据的组合。

例如如果您的 NDEF 扇区是扇区 1 和扇区 2,则需要读取 block 4、5、6(= 扇区 1 的 block 0..2)和 block 8、9、10(= 扇区 2 的 block 0..2)聚合NDEF标签的数据。

在您的情况下, block 4 和 block 5 中的数据似乎就足够了(因为标记数据的末尾标记在 block 5 中,正如您正确发现的那样)。你案例中的相关标签数据是

0000030E D1010A54 02656E6D 6F726574746FFE00 00000000 00000000 00000000

标签数据本身被打包到 TLV(标签长度值)结构中。一个 TLV block 由一个强制性标记字节、一个条件长度字段和一个可选数据字段组成:

  • 没有长度和数据字段的 TLV:
+----------+| TAG      || (1 byte) |+----------+
  • 数据字段长度为 0 到 254 字节的 TLV:
+----------+----------+-----------+| TAG      | LENGHT n | DATA      || (1 byte) | (1 byte) | (n bytes) |+----------+----------+-----------+
  • 数据字段长度为 255 到 65534 字节的 TLV:
+----------+----------+-----------+-----------+| TAG      | 0xFF     | LENGHT n  | DATA      || (1 byte) | (1 byte) | (2 bytes) | (n bytes) |+----------+----------+-----------+-----------+

在您的具体案例中有趣的标签是:

  • NULL TLV:标签 = 0x00,无长度字段,无数据字段
  • 终结者 TLV:标签 = 0xFE,无长度字段,无数据字段
  • NDEF 消息 TLV:标签 = 0x03,有字段,有数据字段(虽然长度可能为零)

因此,在您的情况下,数据解码为:

00    NULL TLV (ignore, process next byte)00    NULL TLV (ignore, process next byte)03    NDEF Message TLV (contains your NDEF message)    0E                              Lenght = 14 bytes    D1010A5402656E6D6F726574746F    Data = NDEF MessageFE    Terminator TLV (stop processing the data)

NDEF 消息可以包含 0、1 或更多 NDEF 记录。在您的情况下,NDEF 消息解码为以下内容:

D1    Record header (of first and only record)          Bit 7 = MB = 1: first record of NDEF message          Bit 6 = ME = 1: last record of NDEF message          Bit 5 = CF = 0: last or only record of chain          Bit 4 = SR = 1: short record length field          Bit 3 = IL = 0: no ID/ID length fields          Bit 2..0 = TNF = 0x1: Type field represents an NFC Forum                                well-known type name    01    Type Length = 1 byte    0A    Payload length = 10 bytes    54    Type field (decoded according to the setting of TNF)              "T" (in US-ASCII) = binary form of type name urn:nfc:wkt:T    02656E6D6F726574746F    Payload field (decoded according to the value of the Type field)

因此,您的 NDEF 消息包含一个文本记录(NFC FORum 知名类型,数据有效载荷 02656E6D6F726574746F。此记录有效载荷解码为:

02    Status byte          Bit 7 = 0: Text is UTF-8 encoded          Bit 6 = 0: Not used          Bit 5..0 = 0x02: Length of IANA language code field656E    IANA language code field            "en" (in US-ASCII) = Text is in English6D6F726574746F    Text                      "moretto" (in UTF-8)

关于android - 如何解读 Mifare Classic 1K 上的 NDEF 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37220910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com