2012-03-21 138 views
0

我正在致力於一個Android項目,該項目依靠發現的NFC標籤的唯一UID來處理標籤。我使用以下代碼提取此UID:如何在Android中檢測NFC標籤中的UID是否是隨機的?

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

但是,對於某些技術,此UID是爲了安全目的而隨機生成的。有人有一個想法,我怎麼能檢測到這是一個隨機生成的UID?有沒有設置某種標誌?

注意:一個簡單的解決方案是讀取標籤兩次並比較UID。但是,我想避免這種情況。

回答

3

對於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。

+0

你是更好的答案! – 2012-03-21 08:16:33

+1

這實際上有點令人驚訝。如果每次讀取它時UID有什麼用處? – zundi 2015-08-03 15:26:36

-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. 
+0

這與nfc無關... – 2012-03-21 00:48:43

+0

啊,NFC使用的是非標準的UID? – jimw 2012-03-21 00:57:25

+0

NFC UID(或實際上是ISO/IEC 14443 UID)早於RFC4122 UUID。 AFAICT,這兩種類型之間沒有關係。 – 2012-03-21 08:14:34