如何访问使用 MIFARE 应用程序目录结构的 MIFARE Classic 卡?

How to access a MIFARE Classic card that uses the MIFARE Application Directory structure?

如何从使用 MIFARE 应用程序目录结构格式化的 MIFARE Classic 卡进行身份验证和读取数据?我正在使用 Android.

请参阅 MIFARE Application Directory 上的 NXP 应用说明。通常,为了从使用 MAD 的 MIFARE Classic 卡中读取数据,您需要执行如下操作:

  1. 使用密钥 A A0 A1 A2 A3 A4 A5(public MAD 读取密钥)向扇区 0(MAD 扇区)进行身份验证。
  2. 读取块 3。
  3. 根据通用字节(从块 3 读取的字节 9),您可以确定
    • 如果卡使用 MAD(位 7 = 1),
    • 如果卡支持多个应用程序(位 6 = 1),并且
    • MAD 版本(位 1-0)。
  4. 读取块 1 和 2,这些块具有以下格式(其中 AIDx 是分配给扇区号 x 的应用程序 ID):

            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
       Byte |  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    Block 1 |CRC |INFO|  AID01  |  AID02  |  AID03  |  AID04  |  AID05  |  AID06  |  AID07  |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    Block 2 |  AID08  |  AID09  |  AID10  |  AID11  |  AID12  |  AID13  |  AID14  |  AID15  |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    
  5. 验证 CRC(块 1,字节 0)。

  6. 浏览 AID 列表(根据块 1 和 2 的数据生成)以查找您的应用程序 AID(从而找到包含您的应用程序数据的扇区)。
  7. 如果使用 MAD 版本 2,验证到扇区 16 并读取块 0 (64)、1 (65) 和 2 (66) 以获得扩展的 AID 列表。这些块的格式是:

            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
       Byte |  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    Block 0 |CRC |INFO|  AID17  |  AID18  |  AID19  |  AID20  |  AID21  |  AID22  |  AID23  |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    Block 1 |  AID24  |  AID25  |  AID26  |  AID27  |  AID28  |  AID29  |  AID30  |  AID31  |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    Block 2 |  AID32  |  AID33  |  AID34  |  AID35  |  AID36  |  AID37  |  AID38  |  AID39  |
            +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
    
  8. 验证您应用程序的扇区(通过 AID 列表发现)和 read/write 您应用程序的数据。