如何在Android中检测NFC标签中的UID是否随机?

时间:2012-03-21 00:33:24

标签: android nfc uniqueidentifier

我正在开发一个Android项目,该项目依赖于已发现的NFC标记的唯一UID来处理标记。我使用以下代码提取此UID:

byte[] extraID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);

但是,对于某些技术,此UID是出于安全目的而随机生成的。有没有人知道如何检测到这是一个随机生成的UID?是否设置了某种标志?

注意:一个简单的解决方案是读取标记两次并比较UID。但是,我想避免这种情况。

2 个答案:

答案 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.