Сделать доступ только для чтения для Mifare UltraLight с помощью Android

Я могу успешно записать свои данные на карту. Я хочу, чтобы никто не мог писать на моей карточке, а только читал. Возможно ли это достичь? Или есть какой-нибудь ключ, где я могу назначить какую-то защиту паролем перед записью данных на мою карту?

Для записи данных используйте:

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);
            }
        }
    }

Любая помощь будет оценена по достоинству!


person Bhoomika Brahmbhatt    schedule 25.02.2015    source источник
comment
Вы читали: stackoverflow.com/questions/5669833/   -  person Morrison Chang    schedule 25.02.2015
comment
@MorrisonChang да, я читал, но не нашел практического решения.   -  person Bhoomika Brahmbhatt    schedule 25.02.2015
comment
У меня проблема с записью данных в MIFARE Ultralight NFC. Вы можете показать мне простой код при вызове getParts(s, 4); метод, как вы устанавливаете строку данных из edittext, пожалуйста, помогите, спасибо.   -  person ShweLiam    schedule 08.12.2015
comment
Что делает getParts(s, 4)??   -  person Anuj Sharma    schedule 16.06.2016


Ответы (1)


Биты блокировки для MIFARE Ultralight расположены в байтах 2-3 на странице 2 (обратите внимание, что 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'
    });
person Michael Roland    schedule 25.02.2015
comment
Я только что добавил ваш код в свой метод writeTag, теперь я не могу записывать в него данные, это хорошо. Но что, если любой другой пользователь установит бит блокировки в «0»? Можно ли разблокировать тег? - person Bhoomika Brahmbhatt; 25.02.2015
comment
Нет, биты блокировки являются только программируемыми, то есть вы можете установить их только на 1, но вы не можете изменить их обратно на 0. - person Michael Roland; 25.02.2015
comment
О да!! Я только что прочитал эту информацию на defcon.org/images/defcon-21/dc-21-presentations/ Большое спасибо!! - person Bhoomika Brahmbhatt; 25.02.2015