在Android上清除MifareClassic部门的最佳方法是什么?

问题描述 投票:1回答:1

是否有更好的方法来清除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()) })
                }
            }
        }
    }
}
android kotlin format nfc mifare
1个回答
1
投票

通过用零填充所有数据块来清除扇区是完全正常的。没有其他方法可以擦除MIFARE Classic卡上的数据。

只需确保不用零覆盖扇区尾部(每个扇区中的最后一个块),因为这会导致无效的访问位(这反过来会使扇区永久不可访问)。我认为这是你试图实现的目标

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

但请注意,例如MIFARE Classic 4K有更大的扇区,其中预告片不是该扇区的第四个数据块。

© www.soinside.com 2019 - 2024. All rights reserved.