【问题标题】:How do I read a record's payload from an NXP MIFARE Ultralight tag?如何从 NXP MIFARE Ultralight 标签读取记录的有效负载?
【发布时间】:2019-02-18 00:28:12
【问题描述】:

我有几个 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 开始,但我到底应该怎么知道呢?数据中肯定有一些东西可以告诉我记录的有效负载从哪里开始以及在哪里停止?

【问题讨论】:

标签: format nfc mifare ndef tlv


【解决方案1】:

数据符合 Type 2 Tag 规范。类型 2 标记的数据页从页/块 4 开始。数据嵌入到 TLV 结构中。

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

NDEF 消息本身由 1 条 NDEF 记录组成(头字节 0xC4 表示该记录是消息的第一个(MB=1)和最后一个(ME=1)记录)。该记录是 NFC 论坛外部类型(标头字节中的 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 消息。

【讨论】:

  • 啊,我没有意识到长度可以用三字节格式表示。当您说数据从页面边界开始时,这是否意味着在长度由一个字节表示的情况下,数据仍将从第 5 页开始?例如:
  • @user928112 不,我的意思是在您的特定情况下数据从页面边界开始。这只是巧合,其他标签可能并非如此。
  • 由于我正在使用 Android,如果我使用 android.nfc.NdefMessage 类来帮助我在从 TLV 结构中提取 NDEF 消息后对其进行解析,是否会有任何潜在问题?
  • @user928112 我不知道。
  • 我终于成功地提取了有效载荷。感谢您朝正确的方向轻推。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多