如何在Android中检测NFC标签中的UID是否是随机的?
我正在致力于一个Android项目,该项目依靠发现的NFC标签的唯一UID来处理标签。我使用以下代码提取此UID:如何在Android中检测NFC标签中的UID是否是随机的?
byte[] extraID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
但是,对于某些技术,此UID是为了安全目的而随机生成的。有人有一个想法,我怎么能检测到这是一个随机生成的UID?有没有设置某种标志?
注意:一个简单的解决方案是读取标签两次并比较UID。但是,我想避免这种情况。
对于NFCA(和IsoDep和/或与MifareClassic组合NFCA),该ID是随机的,如果它正好是4字节长,并用0x08的开始。有一些卡(MIFARE DESFire)可以配置一个4字节长的随机ID并以0x80开头。
对于NfcB(和IsoDep与NfcB组合),没有为随机ID保留的预定ID范围。实际上,任何NfcB ID都可以是随机的。 NfcB ID实际上被称为PUPI,它代表“伪唯一PICC标识符”。所以这个名字已经表明独特性不能保证。
对于NfcF和NfcV,ID一般不会是随机的。
读取标签两次以检测随机ID只有在您从RF域中移除标签时才有效。只要标签保持由Rf字段供电,标签通常会保持相同的随机ID。
此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.
这与nfc无关... – 2012-03-21 00:48:43
啊,NFC使用的是非标准的UID? – jimw 2012-03-21 00:57:25
NFC UID(或实际上是ISO/IEC 14443 UID)早于RFC4122 UUID。 AFAICT,这两种类型之间没有关系。 – 2012-03-21 08:14:34
你是更好的答案! – 2012-03-21 08:16:33
这实际上有点令人惊讶。如果每次读取它时UID有什么用处? – zundi 2015-08-03 15:26:36