如何读取mifare卡的二进制块?
How to read binary blocks of mifare card?
我正在开发一个从 reader 读取 NFC 卡的应用程序。
我知道读取二进制块的代码是这样的:
FF B0 00 04 10
04 表示块 4,10 表示 16 字节数据。我的卡上有数据“TEST009996”。
我 运行 5 代码用于从 4-8 读取二进制块,如下所示:
FF B0 00 04 10
FF B0 00 05 10
FF B0 00 06 10
FF B0 00 07 10
FF B0 00 08 10
我得到了以下结果:
T☻enTEÉ ☺
T☻enTEST00É
T☻enTEST009996É
enTEST009996■ 6É
ST009996■ 6 É
或十六进制:
01 03 A0 10 44 03 11 D1 01 0D 54 02 65 6E 48 43 90 00
44 03 11 D1 01 0D 54 02 65 6E 48 43 49 44 30 30 90 00
01 0D 54 02 65 6E 48 43 49 44 30 30 39 39 39 36 90 00
65 6E 48 43 49 44 30 30 39 39 39 36 FE 00 00 36 90 00
49 44 30 30 39 39 39 36 FE 00 00 36 00 00 00 00 90 00
我是否应该创建一个算法来切割结果以获取数据?有没有更好的方法?
来源:
您的标签似乎是 NFC 论坛 2 类标签(在 NFC Forum website 上查找 NFC 论坛 2 类标签操作规范)。正如您提到的 MIFARE,这可能是一个 MIFARE Ultralight、MIFARE Ultralight C 或 NTAG 标签。
2 类标签上的一个块由 4 个字节组成。读取命令一次读取 4 个块。因此,读取命令为您提供 4 个块(每个块 4 个字节),从给定的块偏移量开始,加上读取命令的状态字(0x9000
表示成功)。在你的情况下你得到:
Read(4, 16): 0103A010 440311D1 010D5402 656E4843 9000
Read(5, 16): 440311D1 010D5402 656E4843 49443030 9000
Read(6, 16): 010D5402 656E4843 49443030 39393936 9000
Read(7, 16): 656E4843 49443030 39393936 FE000036 9000
Read(8, 16): 49443030 39393936 FE000036 00000000 9000
因此,您的标签的内存如下所示:
0103A010
440311D1
010D5402
656E4843
49443030
39393936
FE000036
00000000
Type 2 标签(顺便说一句,为了确保此标签实际上符合 Type 2 标签操作规范,您还需要阅读位于块 3 中的功能容器)包含一系列标签-长度值 (TLV) 结构:
01 (Tag: Lock Control TLV)
03 (Length: 3 bytes)
A0 10 44 (Value: Information on position and function of lock bytes)
03 (Tag: NDEF Message TLV)
11 (Length: 17 bytes)
D1010D5402656E48434944303039393936 (Value: NDEF message)
FE (Tag: Terminator TLV; has no length field)
因此您的标签包含 NDEF 消息
D1010D5402656E48434944303039393936
这转化为
D1 (Header byte of record 1)
- Message begin is set (= first record of an NDEF message)
- Message end is set (= last record of an NDEF message)
- Short record flag is set (= Payload length field consists of 1 byte only)
- Type Name Format = 0x1 (= Type field contains an NFC Forum well-known type)
01 (Type length: 1 byte)
0D (Payload length: 13 bytes)
54 (Type: "T")
02656E48434944303039393936 (Payload field)
NFC 论坛文本记录的有效负载字段解码如下:
02 (Status byte: Text is UTF-8 encoded, Language code has a length of 2 bytes)
656E (Language code: "en")
48434944303039393936 (Text: "TEST009996")
我正在开发一个从 reader 读取 NFC 卡的应用程序。 我知道读取二进制块的代码是这样的:
FF B0 00 04 10
04 表示块 4,10 表示 16 字节数据。我的卡上有数据“TEST009996”。 我 运行 5 代码用于从 4-8 读取二进制块,如下所示:
FF B0 00 04 10
FF B0 00 05 10
FF B0 00 06 10
FF B0 00 07 10
FF B0 00 08 10
我得到了以下结果:
T☻enTEÉ ☺
T☻enTEST00É
T☻enTEST009996É
enTEST009996■ 6É
ST009996■ 6 É
或十六进制:
01 03 A0 10 44 03 11 D1 01 0D 54 02 65 6E 48 43 90 00
44 03 11 D1 01 0D 54 02 65 6E 48 43 49 44 30 30 90 00
01 0D 54 02 65 6E 48 43 49 44 30 30 39 39 39 36 90 00
65 6E 48 43 49 44 30 30 39 39 39 36 FE 00 00 36 90 00
49 44 30 30 39 39 39 36 FE 00 00 36 00 00 00 00 90 00
我是否应该创建一个算法来切割结果以获取数据?有没有更好的方法?
来源:
您的标签似乎是 NFC 论坛 2 类标签(在 NFC Forum website 上查找 NFC 论坛 2 类标签操作规范)。正如您提到的 MIFARE,这可能是一个 MIFARE Ultralight、MIFARE Ultralight C 或 NTAG 标签。
2 类标签上的一个块由 4 个字节组成。读取命令一次读取 4 个块。因此,读取命令为您提供 4 个块(每个块 4 个字节),从给定的块偏移量开始,加上读取命令的状态字(0x9000
表示成功)。在你的情况下你得到:
Read(4, 16): 0103A010 440311D1 010D5402 656E4843 9000
Read(5, 16): 440311D1 010D5402 656E4843 49443030 9000
Read(6, 16): 010D5402 656E4843 49443030 39393936 9000
Read(7, 16): 656E4843 49443030 39393936 FE000036 9000
Read(8, 16): 49443030 39393936 FE000036 00000000 9000
因此,您的标签的内存如下所示:
0103A010
440311D1
010D5402
656E4843
49443030
39393936
FE000036
00000000
Type 2 标签(顺便说一句,为了确保此标签实际上符合 Type 2 标签操作规范,您还需要阅读位于块 3 中的功能容器)包含一系列标签-长度值 (TLV) 结构:
01 (Tag: Lock Control TLV)
03 (Length: 3 bytes)
A0 10 44 (Value: Information on position and function of lock bytes)
03 (Tag: NDEF Message TLV)
11 (Length: 17 bytes)
D1010D5402656E48434944303039393936 (Value: NDEF message)
FE (Tag: Terminator TLV; has no length field)
因此您的标签包含 NDEF 消息
D1010D5402656E48434944303039393936
这转化为
D1 (Header byte of record 1)
- Message begin is set (= first record of an NDEF message)
- Message end is set (= last record of an NDEF message)
- Short record flag is set (= Payload length field consists of 1 byte only)
- Type Name Format = 0x1 (= Type field contains an NFC Forum well-known type)
01 (Type length: 1 byte)
0D (Payload length: 13 bytes)
54 (Type: "T")
02656E48434944303039393936 (Payload field)
NFC 论坛文本记录的有效负载字段解码如下:
02 (Status byte: Text is UTF-8 encoded, Language code has a length of 2 bytes)
656E (Language code: "en")
48434944303039393936 (Text: "TEST009996")