2014-09-23 39 views
1

我剛剛收到Mifare Ultralight C.我可以使用android手機(Galaxy Ace 3)輕鬆讀取它的值。在Mifare Ultralight上寫入受限時讀取C

0 hex: 04 9a 6f 79 
1 hex: 52 02 3a 80 
2 hex: ea 48 00 00 
3 hex: 00 00 00 00 
4 hex: 02 00 00 10 
5 hex: 00 06 01 10 
6 hex: 11 ff 00 00 
7 hex: 00 00 00 00 
8 hex: 00 00 00 00 
9 hex: 00 00 00 00 
10 hex: 00 00 00 00 
11 hex: 00 00 00 00 
12 hex: 00 00 00 00 
13 hex: 00 00 00 00 
14 hex: 00 00 00 00 
15 hex: 00 00 00 00 
16 hex: 00 00 00 00 
17 hex: 00 00 00 00 
18 hex: 00 00 00 00 
19 hex: 00 00 00 00 
20 hex: 00 00 00 00 
21 hex: 00 00 00 00 
22 hex: 00 00 00 00 
23 hex: 00 00 00 00 
24 hex: 00 00 00 00 
25 hex: 00 00 00 00 
26 hex: 00 00 00 00 
27 hex: 00 00 00 00 
28 hex: 00 00 00 00 
29 hex: 00 00 00 00 
30 hex: 00 00 00 00 
31 hex: 00 00 00 00 
32 hex: 00 00 00 00 
33 hex: 00 00 00 00 
34 hex: 00 00 00 00 
35 hex: 00 00 00 00 
36 hex: 00 00 00 00 
37 hex: 00 00 00 00 
38 hex: 00 00 00 00 
39 hex: 00 00 00 00 
40 hex: 00 00 00 00 
41 hex: 00 00 00 00 
42 hex: 30 00 00 00 
43 hex: 00 00 00 00 

然後我改變43頁值0x80和42頁至0x2A。現在,當我在讀值是這樣的:

Log.e(LOG, "read"); 
for(int j = 0; j <= 40; j += 4){ 
byte[] resp = mifare.readPages(j); 
logResponse(j, resp); 


private void logResponse(int j, byte[] resp){ 
    for(int i = 0; i < resp.length; i += 4){ 
      Log.e(LOG, String.valueOf(j + i/4) + " hex: " 
        + String.format("%02x ", resp[i]) 
        + String.format("%02x ", resp[i + 1]) 
        + String.format("%02x ", resp[i + 2]) 
        + String.format("%02x", resp[i + 3])); 
     } 
} 

我越來越從0第43頁。值和1,而不是42和
接下來的事情是,當我爲了驗證發送消息0x1A00,我得到transceive failed
有沒有辦法檢查它是否真的是Mifare Ultralight C或其他標籤?或者我錯誤地認爲第43頁中的值0x80僅限制寫訪問?

回答

1

您從標籤中讀取的內容看起來好像可能是MIFARE Ultralight C標籤(特別是您可以閱讀第42和43頁)。

  • 將AUTH0設置爲42(0x2A)後出現的翻轉是預期的行爲。即當您保護從第X頁開始的標籤內存時,READ命令將在第X-1頁之後翻轉。

  • 將AUTH1設置爲0x80不會達到您的預期。只有AUTH1中的最低位是相關的,因此通常將AUTH1設置爲0x00(限制讀取和寫入)或0x01(僅限制寫入)。

  • 我不太確定爲什麼認證命令失敗。

    byte[] cmd = { (byte)0x1A, (byte)0x00 }; 
    byte[] result = mifare.transceive(cmd); 
    

    通常,如果該命令返回其他任何0xAF執行(或拋出異常),這是一個明顯的跡象表明一個標籤是 MIFARE超輕C.

+0

只是測試AUTH1值你是對的,我的錯誤。真正奇怪的是,它限制了正確的讀/寫,但是在驗證命令方面存在問題。要清楚,我使用MifareUlralral作爲mifare對象,可以嗎? – 2014-09-24 11:32:23

+0

MifareUltralight和NfcA都可以。 YOu在0x1A字節後發送零字節,對嗎?在發送身份驗證命令之前,您還使用了哪些操作?你正在執行任何讀/寫操作? – 2014-09-24 11:48:06

+0

我的命令與您的文章完全相同。只有在此命令之前連接()。我已經嘗試過在auth命令之前讀取同樣的行爲。 – 2014-09-24 11:57:34

相關問題