我正在开发一个Android项目,该项目依赖于已发现的NFC标记的唯一UID来处理标记。我使用以下代码提取此UID:
byte[] extraID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
但是,对于某些技术,此UID是出于安全目的而随机生成的。有没有人知道如何检测到这是一个随机生成的UID?是否设置了某种标志?
注意:一个简单的解决方案是读取标记两次并比较UID。但是,我想避免这种情况。
答案 0 :(得分:4)
对于NfcA(和IsoDep和/或MifareClassic结合NfcA),如果ID恰好是4个字节长并且以0x08开头,则ID是随机的。有些卡(MIFARE DESFire)可以配置一个4字节长的随机ID,并以0x80开头。
对于NfcB(和IsoDep与NfcB结合使用),没有为随机ID保留的预定ID范围。实际上,任何NfcB ID都可以是随机的。 NfcB ID实际上称为PUPI,它代表“伪唯一PICC标识符”。所以这个名字已经表明不保证唯一性。
对于NfcF和NfcV,ID通常不是随机的。
只有从RF字段中删除标记,才能读取标记两次以检测随机ID。只要标记由Rf字段保持供电,标记通常会保留相同的随机ID。
答案 1 :(得分:-1)
此RFC:http://tools.ietf.org/html/rfc4122#section-4.1.3定义UID的格式;它包含一个字段,指示它是什么类型的UID:
Msb0 Msb1 Msb2 Msb3 Version Description
0 0 0 1 1 The time-based version
specified in this document.
0 0 1 0 2 DCE Security version, with
embedded POSIX UIDs.
0 0 1 1 3 The name-based version
specified in this document
that uses MD5 hashing.
0 1 0 0 4 The randomly or pseudo-
randomly generated version
specified in this document.
0 1 0 1 5 The name-based version
specified in this document
that uses SHA-1 hashing.