android - 使用 Android 对 Mifare UltraLight 进行只读访问

标签 android nfc mifare lockbits

我可以成功地将数据写入卡上。我希望没有人可以在我的卡片上写字,而只能阅读。这有可能实现吗?或者在我的卡上写入数据之前,是否有任何 key 可以指定一些密码保护?

使用以下方式写入数据:

public void writeTag(Tag tag) {
        MifareUltralight ultralight = MifareUltralight.get(tag);
        String[] mg= getParts(s, 4);

        try {
            ultralight.connect();
            int j=4;
            for (int i = 0; i < mg.length; i++) {

                ultralight.writePage(j, mg[i].getBytes(Charset.forName("US-ASCII")));
                j++;
            }
            Toast.makeText(getApplicationContext(), "Write Done!", Toast.LENGTH_LONG).show()
        } catch (IOException e) {
            Log.e(TAG, "IOException while closing MifareUltralight...", e);
        } finally {
            try {
                ultralight.close();
            } catch (IOException e) {
                Log.e(TAG, "IOException while closing MifareUltralight...", e);
            }
        }
    }

如有任何帮助,我们将不胜感激!

最佳答案

MIFARE Ultralight 的锁定位位于第 2 页的字节 2-3(请注意,Ultralight C 和 Ultralight 衍生产品(如 NTAG)可能在其他页面上有额外的锁定位,请参阅数据表以了解其位置)。每个锁定位控制存储区域的某些页的锁定状态。为了激活锁定,您必须通过对包含锁定位的页面发出写入命令来将锁定位设置为'1'。因此,对于锁定整个标签的最简单场景,您可以执行以下操作:

    // write all-ones to the lock bits on page 0x02
    byte[] result;
    result = ultralight.transceive(new byte[]{
            (byte)0xA2,  // Command: WRITE
            (byte)0x02,  // Address: page 0x02 (2)
            (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF  // Data: set bytes 2-3 to all '1'
    });

关于android - 使用 Android 对 Mifare UltraLight 进行只读访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712162/

相关文章:

android - Gradle 插件 3.0 重写 versionName

android - 将 Mifare Ultralight 格式化为 NDEF 抛出 IO 异常

android - NFC 标签未在 Android 浏览器中打开 URL

java - 如何正确写入 MifareUltralight NFC 标签?

android - 如何将数据写入MifareClassic标签?

android - NFC 安卓 : getting value from a NdefMessage

android - 使用不同版本的 Google Play 服务库

android - 从代码进行设置管理

android - 获取不同 fragment 的 EditText 值

安卓NFC无法读取Oberthur ID ONE(PIV类型A大D)