使用 Android 对 Mifare UltraLight 进行只读访问
Make Read Only access for Mifare UltraLight using 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);
}
}
}
如有任何帮助,我们将不胜感激!
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'
});
我可以成功将我的数据写入卡中。我希望没有人可以在我的卡上写字,但他们只能读。这有可能实现吗?或者有什么钥匙可以让我在将数据写入卡之前分配一些密码保护吗?
写入数据使用:
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'
});