android - 在 Android 上清除 MifareClassic 扇区的最佳方法是什么?

标签 android kotlin format nfc mifare

清除 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()) })
                }
            }
        }
    }
}

最佳答案

通过用零填充所有数据 block 来清除扇区是完全没问题的。没有其他方法可以删除 MIFARE Classic 卡上的数据。

只要确保您没有用零覆盖扇区尾部(每个扇区的最后一个 block ),因为这会导致无效的访问位(这反过来会使该扇区永久无法访问)。我认为这就是您尝试实现的目标

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

但请注意,例如MIFARE Classic 4K 具有更大的扇区,其中尾部不是扇区的第 4 个数据 block 。

关于android - 在 Android 上清除 MifareClassic 扇区的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075878/

相关文章:

android - 为什么我的 else 语句不适用于具有两个功能的 Cardview?

java - Android 中的原生广告 Admob 到自定义列表适配器

java - 在 Kotlin 中为接口(interface)编写默认方法时 IClass$DefaultImpls 的 NoClassDefFoundError

Android - 绑定(bind)适配器不起作用

java - 如何在 java String.ValueOf 中格式化 float

android - Chrome 移动渐进式网络应用在离线时返回错误

php - Android使用JSON插入mysql

kotlin - 如何在 Ktor 中接收 JSON 对象?

java - 字符串转十六进制

php - 在来自数据库的回显中显示文本区域格式