可以使用身份验证方法。
首先,这是 Mifare Classic 4k 的数据表:
http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
对你来说重要的章节是:
简而言之,写保护的工作方式如下:
Mifare Classic 被划分为每个 4*16 字节的扇区(仅适用于前 1k 左右......较高的块有点不同,但这在规范中有记录)。在这 64 个字节中,有 16 个用于认证/保护。对于卡的每个扇区,您执行以下操作:
- 使用 KeyA 验证扇区
- 阅读扇区预告片。
- 修改扇区尾部的访问位。
- 将扇区尾部写回卡。
Mifare Classics 的 KeyA 值为:
byte[] KEY_DEFAULT = {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};
对于未格式化的工厂新卡。
字节[] KEY_MIFARE_APPLICATION_DIRECTORY = {(字节)0xA0,(字节)0xA1,(字节)0xA2,(字节)0xA3,(字节)0xA4,(字节)0xA5};
对于卡的第一个扇区
byte[] KEY_NFC_FORUM =
{(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7,(byte)0xD3,(byte)0xF7};
对于所有其他部门。
重要提示:您必须将原始 KeyA 密钥写回卡中。如果这些与上面显示的密钥不同,则该卡将不再符合 Ndef。
对于修改后的访问位,您有两种选择:
仅为 KeyA 启用读取。这将为您提供无法撤销的 100% 写保护。
启用 KeyA 的读取和 KeyB 的读取/写入。还将密钥存储在 KeyB 中。这将允许您使用您的密钥 B 对写保护扇区进行身份验证,以解除对卡的保护。
背景:Android 只会使用上面显示的 KeyA 值验证 Ndef 格式的标签。Ndef 检测代码从不单独尝试 KeyB,因此您可以将 KeyB 用于您自己的目的。