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

标签 format nfc mifare ndef tlv

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

最佳答案

数据完全符合 2 类标签规范。类型 2 标签的数据页从页/ 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 论坛外部类型(头字节中的 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 消息。

关于format - 如何从 NXP MIFARE Ultralight 标签读取记录的有效负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738998/

相关文章:

Python 字符串格式 args 与 kwargs

android - 如何启用 NFC 设置

ubuntu - 如何从智能卡获取 CPLC 数据?

java - 点击另一个支持 NFC 的设备后无法进入 onNewIntent。(android)

c# - 我如何在 desfire ev1 中进行 native 身份验证

Android NFC - ndef.writeNdefMessage() 抛出 IOException 并删除标签数据

delphi - Formatfloat 是如何工作的

perl - 如何创建数字标尺和均匀间隔的数字宽度标记

java - Sun 的统一日志记录格式是否已在任何地方发布过?

nfc - 如何在 DESfire Ev1 卡上使用 ISO7816 选择命令?