使用Android保护Mifare Ultralight很容易,有Ndef.makeReadonly()
方法。但是Mifare Classic标签返回Ndef.canMakeReadonly() == false
,所以这是不可能的。我听说可以通过设置a或b键来读取或至少用密钥保护它。
MifareClassic tech中有这种方法:authenticateSectorWithKeyB(int sectorIndex, byte[] key)
有没有人知道这是否可用于在mifare经典标签上发送只读的ndef消息?或者我怎样才能在标签上写一个ndef消息,然后以某种方式锁定新的写入?
答案 0 :(得分:8)
可以使用身份验证方法。
首先,这是Mifare Classic 4k的数据表:
http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
您的重要章节是:
简而言之,写保护的工作原理如下:
Mifare Classic分为4 * 16字节的扇区(仅适用于前1k左右......较高的块有点不同,但规格中记载了这些)。在这64个字节中,16个用于认证/保护。对于卡片的每个部分,您可以执行以下操作:
Mifare Classics的KeyA值为:
byte [] KEY_DEFAULT = {(字节)为0xFF,(字节)为0xFF,(字节)为0xFF,(字节)为0xFF,(字节)为0xFF,(字节)为0xFF};
对于未格式化的工厂新卡。
byte [] KEY_MIFARE_APPLICATION_DIRECTORY = {(字节)0XA0,(字节)0xA1,(字节)0xA2,(字节)0xA3执行,(字节)0xA4,(字节)0xA5的};
对于卡片的第一部分
byte [] KEY_NFC_FORUM =
{(字节)0xD3,(字节)0xF7,(字节)0xD3,(字节)0xF7,(字节)0xD3,(字节)0xF7};
对于所有其他行业。
重要提示:您必须将原始KeyA密钥写回卡。如果这些与上面显示的键不同,则卡将不再符合Ndef标准。
对于修改后的访问位,您有两种选择:
仅为KeyA启用Read。这将为您提供100%的写保护,无法撤销。
启用KeyA读取和KeyB读取/写入。还在KeyB中存储密钥。这将允许您使用您的秘密KeyB对写保护扇区进行身份验证,以取消对卡的保护。
背景:Android将仅使用上面显示的KeyA值对Ndef格式的标签进行身份验证。 Ndef检测代码永远不会自己尝试KeyB,因此您可以将KeyB用于自己的目的。