在Mifare Desfire中创建标准数据文件

时间:2016-06-07 09:46:54

标签: android

在Mifare Desfire中创建文件。 返回错误响应如0x0E已发生DESFire卡相关异常。 在mifare desfire中创建文件的正确命令是什么

CreateStdDataFile(FileNo,Com.Set.,AccessRights,FileSize)
        [8bytes]

public void CreateFile() throws Exception {
    byte[] buffer = new byte[7];
    buffer[0] = (byte) ((0x00)); //file Number
    buffer[1] = (byte) ((0xFF)); //Comm. Sett.
    buffer[2] = (byte) (0x00); // 2 & 3 Access Rights
    buffer[3] = (byte) (0x04);
    buffer[4] = (byte) (0x00);  // 4 & 5 & 6 File Size
    buffer[5] = (byte) (0x00);
    buffer[6] = (byte) (0x0F);

    sendRequest(CREATE_FILE,buffer);
}

try
{
    reader.CreateFile();
}
catch (Exception e) {
    Log.d(TAG, "Problem accessing Desfire tag", e);
} finally {
    try {
        isoDep.close();
    } catch (IOException e) {
        // ignore
    }
}

1 个答案:

答案 0 :(得分:1)

您遇到的问题是endianness。 (特别参见插图部分。)

DESFire指令要求您以最低有效字节顺序(little-endian)传递文件大小,但您的代码使用最高有效字节顺序(大-endian)。

您目前在代码中使用它的方式(0x00, 0x00, 0x0F)您不需要大小为0x00000F(15)字节但0x0F0000(983 040)字节的文件。

要请求大小为15字节的文件,您的代码应为:

// ...
buffer[4] = (byte)0x0F;
buffer[5] = (byte)0x00;
buffer[6] = (byte)0x00;
// ...