用Android保护Mifare Ultralight很容易,有Ndef.makeReadonly()方法可以.但是Mifare Classic标签会返回Ndef.canMakeReadonly() == false,所以这是不可能的.我听说可以通过设置a或b键来读取或至少用密钥保护它.
MifareClassic技术中有这种方法: authenticateSectorWithKeyB(int sectorIndex, byte[] key)
有谁知道这是否可用于在mifare经典标签上发送只读消息的ndef消息?或者我怎样才能在标签上写一个ndef消息,然后以某种方式锁定新的写入?
可以使用身份验证方法.
首先,这是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 = {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};
对于未格式化的工厂新卡.
byte [] KEY_MIFARE_APPLICATION_DIRECTORY = {(byte)0xA0,(byte)0xA1,(byte)0xA2,(byte)0xA3,(byte)0xA4,(byte)0xA5};
对于卡的第一部分
byte [] KEY_NFC_FORUM =
{(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7};
对于所有其他部门.
重要提示:您必须将原始KeyA密钥写回卡.如果这些与上面显示的键不同,则卡将不再符合Ndef标准.
对于修改的访问位,您有两种选择:
仅为KeyA启用Read.这将为您提供100%的写保护,无法撤销.
为KeyB启用读取,为KeyB启用读/写.还在KeyB中存储密钥.这将允许您使用密钥B对写保护扇区进行身份验证,以取消对卡的保护.
背景:Android将仅使用上面显示的KeyA值对Ndef格式的标签进行身份验证.Ndef检测代码不会自行尝试KeyB,因此您可以将KeyB用于自己的目的.
| 归档时间: |
|
| 查看次数: |
6394 次 |
| 最近记录: |