当前位置: 首页 > 知识库问答 >
问题:

使用C语言的NXP Mifare Ultralight从NFC腕带读取正确数据

白和泽
2023-03-14

我对NFC设备阅读非常陌生,但我已经设法使用nfc-mful trlight. c(libnfc)的代码在我自己的项目中实现。

我不明白的是,当我从MIFARE超轻波段读取数据时,我得到了很多垃圾。

例如,我在标签中有号码25555557455888(我使用了一个Android设备将这个号码写入标签)。

现在当我运行时:

nfc-mfultralight r /home/user/dump

我明白了

d▒r▒!▒ H▒▒U255555574558888▒-67644-67546-2346

这是来自libnfc的例子,所以这个程序不应该只读取正确的数据吗?我正在使用的Android应用程序只是看到了255555574558888值。值 -67644-67546-2346 是我之前写过的一部分。

我如何知道我需要读取的正确数据?我应该在示例代码中更改什么以使其正常工作?

我正在使用ACR122从标签中读取数据。

PS:这是我第一个使用NFC设备、libnfc和MIFARE Ultralight标签的项目,所以你认为我应该阅读的任何东西都请告诉我。

编辑1

所以我发现了这个问题:使用NXP阅读器库读取NFC Mi的卡片

我认为这对我有所帮助。我打印出了另一个测试字符串的十六进制值并得到了这个

04  64  13  fb
72  f7  21  84 
20  48  00  00
e1  11  06  00 
03  0a  d1  01
06  54  02  65 
6e  68  65  79
fe  00  00  79 
35  35  38  38
38  38  fe  00 
2d  36  37  36
34  34  2d  36 
37  35  34  36
2d  32  33  34
36  fe  00  00
00  00  00  00
00

我看到< code>3d后面是< code>0a,然后是< code>d1,但是< code>3d之前的所有值是什么?这是因为libnfc吗?

共有1个答案

乜钱明
2023-03-14

您在第0页和第1页(字节0到7)中捕获的数据是卡的UID。页面2包含卡特定数据(字节8和9)和锁字节(字节10和11)。第3页包含能力容器(CC),表明该标签是根据NFC论坛类型2标签操作规范1.1版格式化的。标签的用户数据区域从第4页开始。

由于此标签遵循NFC论坛的标签操作规范,因此其上的NDEF数据存储在NDEF-TLV对象(标签0x03,长度0x0A)中。0xD1表示NDEF消息,该消息由NFC论坛记录类型的短格式记录组成。记录类型“T”(0x54)表示它是文本记录。文本记录包含语言定义“en”(英语)和文本“嘿”(0x68 0x65 0x79)。数据区域由Terminator-TLV终止(标签0xFE,长度0x00)。

此外,以前的NDEF消息中的数据似乎比当前消息大。由于数据以页(4字节)写入,并且在写入新消息时通常不会清除标签的数据区域,因此旧数据仍然可以从标签中读取。

您可能想阅读NFC论坛的以下规范(可在其网站上找到):

  • 类型2标签操作规范
  • NFC数据交换格式(NDEF)技术规范
  • NFC记录类型定义(RTD)技术规范
  • NFC文本RTD技术规范
 类似资料:
  • 如何使用scala语言从hdfs数据集中读取数据?数据是任何记录有限的“CSV”文件。

  • 本文向大家介绍Go语言中反射的正确使用,包括了Go语言中反射的正确使用的使用技巧和注意事项,需要的朋友参考一下 介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题,在使用前需要三思: 大量的使用反射会损失一定性能 Clear is better than clever. Reflectio

  • A370 的腕带更换方便。例如,如果您想让腕带颜色与您的服装搭配,很容易就可实现。 1.将腕带从两侧弯曲(一次一侧),可将其从设备上取下。 2.将设备与腕带拉开。 要安装腕带,以相反的顺序进行步骤操作。确保腕带与设备在两侧齐平适配。

  • A300 的 USB 连接器位于腕带内的设备中。您需要卸下腕带以便利用计算机设置 A300、为电池充电及变更腕带。 从搭扣侧将腕带弯曲从而将其从设备上卸下。 从搭扣侧握住腕带。先从一侧而后再从另一侧将腕带从按钮上方穿过。仅在必要时拉伸腕带。 将设备与腕带拉开。 要安装腕带,以相反的顺序进行步骤操作。

  • 问题 你要写C扩展来读取来自任何Python类文件对象中的数据(比如普通文件、StringIO对象等)。 解决方案 要读取一个类文件对象的数据,你需要重复调用 read() 方法,然后正确的解码获得的数据。 下面是一个C扩展函数例子,仅仅只是读取一个类文件对象中的所有数据并将其输出到标准输出: #define CHUNK_SIZE 8192 /* Consume a "file-like" ob

  • 我正在开发一个应用程序,用于将阿拉伯语文本从PDF中提取到字符串变量中,每个单词以相反的顺序出现(而不是专用于解决),有时以正确的顺序出现,但分开的字符(专用于解决)类似于英语字符,但在阿拉伯语中,字符是连接在一起的。任何解决方案:我正在使用visual studio 2017 C#MVC应用程序,在windows 10本地,使用iTextSharp从PDF中读取文本。 注意:问题不仅仅是颠倒顺序