Каков наилучший способ очистить сектор MifareClassic на Android? - PullRequest
0 голосов
/ 29 августа 2018

Есть ли лучший способ очистить сектор на карте MIFARE Classic, чем записать его со всеми нулями?

Вот пример моего текущего кода:

for (i in 0 until sectorCount) {
    if (!authenticateSectorWithKeyA(i, key) && !authenticateSectorWithKeyA(i, MifareClassic.KEY_DEFAULT)) {
        break
    }

    val idx = sectorToBlock(i)

    for (j in 0 until getBlockCountInSector(i)) {
        val index = idx + j
        when (index) {
            0 -> cardId = getCardId(readBlock(idx + j))
            1 -> {} //Todo: Write specail data
            4 -> {} //Todo: Write specail data
            5 -> {} //Todo: Write specail data
            else -> {
                if ((index + 1) % 4 != 0) {
                    writeBlock(index, ByteArray(16).apply { fill(0.toByte()) })
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 14 сентября 2018

Очистка сектора путем заполнения всех блоков данных нулями - это прекрасно. Другого способа удаления данных на картах MIFARE Classic нет.

Просто убедитесь, что вы не перезаписываете трейлер сектора (последний блок в каждом секторе) нулями, так как это приведет к недопустимым битам доступа (что, в свою очередь, сделает сектор постоянно недоступным). Я полагаю, это то, что вы пытаетесь достичь с

if ((index + 1) % 4 != 0)

но помните, что, например, MIFARE Classic 4K имеет большие сектора, где трейлер не является 4-м блоком данных сектора.

...