我使用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/