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?
- ¿Cómo la emulación de tarjeta basada en software (HCE) garantiza la seguridad NFC?
- Detección de NFC en dispositivos Android
- Android NFC en Embarcadero XE5
- Modificar los bits de acceso del remolque sector Mifare Classic
- ¿Cómo puedo enviar una cadena a través de NFC mientras Screen-Pinning?
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; }
- Enviar URL a través de NFC para ser abierto por el navegador
- ¿Cómo puedo comprobar la versión de Open Mobile API en Android?
- Etiqueta Android NFC recibida con el receptor de difusión
- Android NFC: protocolo SNEP y respuesta P2P
- Conéctese a 802.1x WiFi con una etiqueta NFC
- Emulación de tarjeta NFC Android
- ¿Puedo leer una tarjeta HID iClass con un dispositivo Android?
- Cómo enviar una cadena simple de android a android sobre nfc?
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) });
- ¿Cómo reconstruir o restablecer caché Observable, utilizado con Retrofit para obtener nuevos datos?
- Softkeyboard oculta botón debajo de varias líneas EditText?