如何从 NXP MIFARE Ultralight 标签读取记录的有效负载?

How do I read a record's payload from an NXP MIFARE Ultralight tag?

我有几个 NXP MIFARE Ultralight 标签(类型 2),它们在第一条记录中包含一些数据。我正在使用 ACS 1252U 读取标签,我尝试手动迭代一些数据以了解标签上的内容,但我似乎无法弄清楚如何确定记录的开始位置以及结束的地方。

以下是有关 NFC 标签和我正在尝试读取的记录的一些详细信息:

下面是我的一个标签中从第 04 页开始的一些数据:

03 ff 01 5a
c4 0f 00 00
01 45 62 63
61 72 64 2e
6e 65 74 3a
62 63 61 72
64 39 39 37
30 31 1e 34

现在,如果我将所有这些转换为 ASCII,我将得到以下内容:

ÿZÄEbcard.net:bcard997014

我只知道我要获取的实际数据(或有效负载)从 99701 开始,但我到底应该怎么知道呢?数据中肯定有一些东西可以告诉我记录的有效负载从哪里开始以及在哪里停止?

数据完全符合 Type 2 标签规范。类型 2 标签的数据页从 page/block 4 开始。数据嵌入到 TLV 结构中。

在您的例子中,第 4 页的第一个字节是 NDEF 消息 TLV (0x03) 的标记。下一个字节表示长度字段以 3 字节格式编码。因此,长度为 0x015A(= 346 字节)。因此,您必须阅读接下来的 87 页(= ceil(346/4),因为数据从页面边界开始)以检索完整的 NDEF 消息。

NDEF消息本身包含1条NDEF记录(header字节0xC4表示该记录是消息的第一个(MB=1)和最后一个(ME=1)记录)。该记录是 NFC 论坛外部类型(header 字节中的 TNF=4)。类型名称的长度为 0x0F(= 15 个字节)。有效载荷的长度为 0x0145(= 325 字节)。因此,类型名称是 "bcard.net:bcard",有效负载是“39 39 37 30 31 1E 34 ...”(ITN 似乎没有发布关于其 bcard 类型结构的规范)。

请参阅How to interpret NDEF content on Mifare Classic 1K了解如何解码这些 TLV 结构和 NDEF 消息。