Mifare Ultralight: bloquea páginas específicas

Recibí referencia de este enlace ( Mifare Ultralight C Lock ) para hacer que todas las páginas de una etiqueta Ultralight de Mifare fueran de sólo lectura.

Puedo escribir un mensaje en una etiqueta de Mifare Ultralight con éxito en Android. Ahora quiero bloquear las páginas 4 a 7 (o cualquier página específica). El enlace anterior sólo muestra cómo bloquear todas las páginas. ¿Cómo puedo bloquear páginas específicas?

Este código bloquea todas las páginas:

mifare.transceive(new byte[] { (byte)0xA2, /* CMD = WRITE */ (byte)0x02, /* PAGE = 2 */ (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF /* DATA = lock pages 3..15*/ }); 

 public static boolean writeOnMifareUltralight(Context _context, Tag tag,String pageData, int i) { byte[]result; MifareUltralight mifare = null; try { mifare = MifareUltralight.get(tag); mifare.connect(); mifare.writePage(i, pageData.getBytes(Charset.forName("US-ASCII"))); mifare.transceive(new byte[] { (byte)0xA2, /* CMD = WRITE */ (byte)0x02, /* PAGE = 2 */ (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF/* DATA = lock pages 3..15*/ }); } catch (Exception ex) { ex.printStackTrace(); Log.d("mtw", ex.getMessage()); // return false; } finally { try { mifare.close(); } catch (Exception ex) { ex.printStackTrace(); } } return true; } 

Los bytes de bloqueo de MIFARE Ultralight utilizan un bit para bloquear un bloque. Además, contienen 3 bloques de bloqueo de bits que controlan el estado de bloqueo de los mismos bytes de bloqueo.

  • Byte 2 (en la página 2): Los bits 3-7 son los bits de bloqueo para las páginas 3-7. Así, el bit 3 bloquea la página 3, el bit 4 bloquea la página 4, etc. Los tres bits inferiores son los bits de bloqueo de bloqueo. El bit 0 bloquea el bit de bloqueo para la página 3, el bit 1 bloquea los bits de bloqueo para las páginas 4-9 y el bit 2 bloquea los bits de bloqueo para las páginas 10-15.

  • Byte 3 (en la página 2): Los bits 0-7 son los bits de bloqueo para las páginas 8-15. Así, el bit 0 bloquea la página 8, el bit 1 bloquea la página 9, etc.

Por ejemplo, para bloquear las páginas 4-7, puede utilizar el siguiente comando:

 mifare.transceive(new byte[] { (byte)0xA2, /* CMD = WRITE */ (byte)0x02, /* PAGE = 2 */ (byte)0x00, (byte)0x00, (byte)0xF0, (byte)0x00 /* DATA = lock pages 4..7*/ }); 

Tenga en cuenta que en lugar de mifare.transceive() también podría utilizar mifare.writePage() :

 mifare.writePage(2, new byte[] { (byte)0x00, (byte)0x00, (byte)0xF0, (byte)0x00 /* DATA = lock pages 4..7*/ }); 

Tenga en cuenta que los bits de bloqueo son programables una sola vez. Por lo tanto, una vez que un bit de bloqueo se establece en 1 lógico (es decir, LOCKED), no se puede invertir a un 0 lógico (es decir, UNLOCKED).

Esto también le permite establecer un bit de bloqueo a la vez. Por ejemplo, para establecer la página i LOCKED ( donde 3 <= i <= 15 !!! ), algo como esto debería funcionar:

 mifare.transceive(new byte[] { (byte)0xA2, /* CMD = WRITE */ (byte)0x02, /* PAGE = 2 */ (byte)0x00, (byte)0x00, (byte)((1<<i) & 0x0FF), (byte)(((1<<i)>>>8) & 0x0FF) }); 
  • P2P bidireccional SEQUENTIAL con NFC en Gingerbread
  • Iniciar nueva actividad después de escribir en la etiqueta NFC
  • ¿Por qué Android HCE no admite Mifare Classic?
  • ¿Cómo comprobar si NFC está habilitado o no en android?
  • ¿Cómo saber si la etiqueta está presente?
  • Cómo cambiar "Elegir una acción" a "Completar acción usando" en Android?
  • Elemento seguro de control de acceso en ICS 4.0.4
  • ¿Cómo podría comprobar si un dispositivo Android es compatible con SNEP o Android Ndef Push Protocol?
  • ¿Cómo leer y escribir las etiquetas NFC de Android?
  • Modos de envío y recepción de DES para la autenticación DESFire
  • Acaba de leer una etiqueta NFC
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.