未检测到写入 mifare 1k 卡的 Ndef 数据

Posted

技术标签:

【中文标题】未检测到写入 mifare 1k 卡的 Ndef 数据【英文标题】:Ndef data written in mifare 1k card not getting detected 【发布时间】:2019-07-29 16:45:32 【问题描述】:

我已经在 Mifare 卡中写入了 Ndef 数据,我希望任何支持 NFC 的 android 设备都可以读取它,无论是否支持 Mifare 卡。

部分手机如荣耀 8 pro(不支持 Mifare)可以读取标签,但其他手机如三星 J7 无法读取。

我在图片中附加了卡片数据。 我已使用非标准密钥将扇区 2 及以后的扇区设为私有

public void onTagDiscovered(Tag tag) 
// This is getting called for all devices
 Ndef ndef = Ndef.get(tag);

ndef 在三星 j7 中为空,而在荣耀 8 pro 中它有一个对象。

知道为什么会发生这种情况或有任何其他方式来实现吗?

【问题讨论】:

你从哪里得知荣耀 8 pro 不支持 Mifare 而三星 J7 支持? 我的意思是说荣耀 8 pro 和三星 j7 都不支持 Mifare,但是荣耀可以读取 Mifare 卡中的 Ndef 数据,而 J7 不支持。 Mifare supported device list 【参考方案1】:

请注意,在某些手机上,操作系统不报告 Mifare 支持,尽管 Mifare Classic 卡可以正常读取。如果存在 Mifare 支持,Android 应该报告com.nxp.mifare 系统功能,但有些手机不支持。

因此,像 NFC Check by Tapkey 这样的一些应用有时会报告 Mifare 支持不存在,尽管它存在。需要明确的是,这不是这些应用程序的错,而是操作系统的错。已知一些较旧的 Moto 手机存在此问题。根据您的描述,荣耀 8 pro 似乎也有同样的问题,否则它不会返回 Ndef 实例。另一方面,可能三星 J7 实际上并不支持 Mifare,这就是它不返回 Ndef 实例的原因。

根据您的问题,我推断您正在谈论 Mifare Classic 卡。请注意,与 Mifare Classic 相比,其他 Mifare 卡,即 Mifare DESFire 卡,可以充当 Type 4 NDEF 标签,因此甚至可以被不支持专有 Mifare classic 的手机读取。这是因为 Type 4 NDEF 标签是标准化的。它们基于标准化的 ISO 7816 协议,并受到几乎所有支持 NFC 的手机的支持。

长话短说,您可能无法使用真正不支持 Mifare 的手机读取 Mifare 经典卡,而读取像 Mifare DESFire 这样的卡应该可以正常工作. DESFire 的其他优点是,它们更安全、更大且更灵活。最大的缺点是,它们要贵得多。

【讨论】:

是的,我正在使用 Mifare classic,但据我所知,Mifare classic 卡也可以像 NDEF 标签一样使用。根据文档nxp.com/docs/en/application-note/AN1305.pdf,数据和密钥必须采用指定格式 另一个参考:mifare.net/support/forum/topic/… 刚刚仔细检查。我可以确认,Honor 8 pro 没有报告com.nxp.mifare 功能。我可以确认它是否可以读取 Mifare Classic 标签。没错,Mifare 标签可以充当 NDEF 标签,但是如果手机无法读取 Mifare Classic,它也无法读取存储在卡上的 NDEF。正如我所解释的,有些手机支持 Mifare,但手机没有报告。荣耀 8 Pro 似乎就是这样一个例子。这就是它可以读取 Mifare 标签的原因,但这并不能改变其他手机无法读取的事实。 可以确认,荣耀8 pro绝对可以读取Mifare classic写的Ndef数据 那么显然,这是 Mifare 支持似乎存在的情况,尽管操作系统没有指出,所以操作系统报告的内容不正确。另一方面,三星 J7 可能是操作系统正确报告缺少 Mifare 支持的情况。这就是为什么在荣耀 8 Pro 上可以读取基于 Mifare Classic 的 NDEF 标签,而在三星 J7 上却不能。我不知道如何让三星 J7 之类的设备读取这样的标签。

以上是关于未检测到写入 mifare 1k 卡的 Ndef 数据的主要内容,如果未能解决你的问题,请参考以下文章

NFC的mifare卡与ntag具体区别

Proxmark3 小白入门 复制 NXP MIFARE CLASSIC 1k 卡

.NET - 通过 NFC 阅读器读取 Mifare Classic。恩智浦与博通阅读器

Mifare DESFIRE EV1 GetCardUid

Mifare卡版获取方法

NFC Mifare Ultralight 读取/写入使用 ACR122 的普通 Java 桌面应用程序