我使用ACR 1255U-J1作为通过蓝牙连接的外部阅读器。我用来访问阅读器的库是acsbt-1.0.0preview7。我使用以下命令对MIFARE Classic标签的扇区1(块4)进行身份验证:

FF 82 0000 06 FFFFFFFFFFFF
FF 86 0000 05 01 00 04 60 00


当我验证一个空的MIFARE Classic标签(使用制造商默认配置)时,我收到响应状态字9000。这表明身份验证成功。

但是,当我尝试对已格式化为NDEF标签的MIFARE Classic标签进行身份验证时,返回的状态字为6300

身份验证的标签格式之间有区别吗?

最佳答案

状态字6300表示身份验证失败。因此,您很可能使用了错误的密钥进行身份验证。

当前,您尝试使用密钥值0x60到扇区1(FFFFFFFFFFFF的密钥A(0x04)进行身份验证,因为它从块4开始)。

当将MIFARE Classic标签格式化为NDEF标签时,将使用以下数据表中定义的NXP专有NDEF映射规范:


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


NDEF映射将访问密钥更改为定义明确的值:


MAD扇区0(以及4K卡上的扇区16):


密钥A将设置为A0A1A2A3A4A5
密钥B可以设置为任何值。例如,Android将其保留为默认值FFFFFFFFFFFF
可以将访问条件设置为允许同时使用两个键进行读/写访问,或者允许使用键A进行只读访问和使用键B进行读写访问。

NDEF扇区(在MAD中声明,在1..15范围内(在4K卡上为17..39)):


密钥A将设置为D3F7D3F7D3F7
密钥B可以设置为任何值。例如,Android将其保留为默认值FFFFFFFFFFFF
可以将访问条件设置为允许同时使用两个键进行读/写访问,或者允许使用键A进行只读访问和使用键B进行读写访问。

未用于NDEF映射的其他扇区(在MAD中声明,在1..15范围内(在4K卡上为17..39)):


密钥和访问条件设置为其特定于应用程序的值(或默认值),并且NDEF映射规范不涉及它们。



因此,当标签使用NDEF映射并尝试向第一个NDEF扇区进行身份验证时,您将需要使用NDEF密钥A和值D3F7D3F7D3F7代替:

FF 82 0000 06 D3F7D3F7D3F7
FF 86 0000 05 01 00 04 60 00


请注意,根据访问位的配置,您可能只能通过密钥A进行读访问。

关于android - 无法验证用作NDEF标签的MIFARE Classic标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37056061/

10-10 03:14