ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 如何解释Mifare Classic 1K上的NDEF内容

2019-07-27 14:37:07  阅读:402  来源: 互联网

标签:ndef android nfc mifare tlv


我使用Android设备上的NFC Tools应用程序(通过内置NFC读卡器)将文本写入Mifare Classic 1K标签.这段文字是“更多”(我的姓).

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

我能够得到以下:

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

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

我知道FE表示内容结束,6D6F726574746F是我的文字.但是如何识别文本的开始位置?我很难理解恩智浦文档中描述的TLV格式.

解决方法:

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

> NFC Type MIFARE Classic Tag Operation
> MIFARE Classic as NFC Type MIFARE Classic Tag

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

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

在您的情况下,来自块4和5的数据似乎已足够(因为标记数据的结尾在块5中标记,正如您自己正确找到的那样).您的案例中的相关标签数据是

0000030E D1010A54 02656E6D 6F726574
746FFE00 00000000 00000000 00000000

标签数据本身被打包到TLV(标签长度值)结构中. TLV块由强制标记字节,条件长度字段和可选数据字段组成:

>没有长度和数据字段的TLV:

+----------+
| TAG      |
| (1 byte) |
+----------+

> TLV,其中数据字段的长度为0到254字节:

+----------+----------+-----------+
| TAG      | LENGHT n | DATA      |
| (1 byte) | (1 byte) | (n bytes) |
+----------+----------+-----------+

> TLV,其中数据字段的长度为255到65534字节:

+----------+----------+-----------+-----------+
| TAG      | 0xFF     | LENGHT n  | DATA      |
| (1 byte) | (1 byte) | (2 bytes) | (n bytes) |
+----------+----------+-----------+-----------+

您特定情况下的有趣标签是:

> NULL TLV:Tag = 0x00,没有长度字段,没有数据字段
>终结者TLV:Tag = 0xFE,没有长度字段,没有数据字段
> NDEF消息TLV:Tag = 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 Message
FE    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 field
656E    IANA language code field
            "en" (in US-ASCII) = Text is in English
6D6F726574746F    Text
                      "moretto" (in UTF-8)

标签:ndef,android,nfc,mifare,tlv
来源: https://codeday.me/bug/20190727/1555054.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有