6

Mifare Classic 1Kの手順は、

  1. タグのポーリング
  2. それらのタグを認証する
  3. 認証が成功した場合は、読み取り/書き込み。

私はすでにこれらの手順を完了しており、特定のセクターからのデータの読み取りと書き込みも行っています。

タグのポーリングのコマンドは

new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,
                (byte) 0x00, (byte) 0x04, (byte) 0xD4, (byte) 0x4A,
                (byte) 0x01, (byte) 0x00 }

認証コマンド

new byte[] { (byte) 0xFF, (byte) 0x86, (byte) 0x00,
                (byte) 0x00, (byte) 0x05, (byte) 0x01,(byte) 0x00, (byte) 0x04, 
                                    (byte) 0x60,(byte) 0x00 };

ここで「(バイト)0x01」はセクター1です

セクター 1 の書き込み、ブロック 5 は

new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,(byte) 0x00, (byte) 0x15, (byte) 0xD4,
             (byte)    0x40,(byte) 0x01, (byte) 0xA0, (byte) 0x05,(byte) 0x01, (byte) 0x02, 
             (byte) 0x03,(byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,(byte) 0x08, 
             (byte) 0x09,(byte) 0x0A,(byte) 0x0B, (byte) 0x0C, (byte) 0x0D,(byte) 0x0E, 
             (byte) 0x0F, (byte) 0x10};

ここ

(byte) 0x01, (byte) 0x02, (byte) 0x03,(byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,(byte) 0x08,(byte) 0x09,(byte) 0x0A,(byte) 0x0B, (byte) 0x0C, (byte) 0x0D,(byte) 0x0E,(byte) 0x0F,(byte) 0x10

は、セクタ 1 のブロック 5 に書き込まれているデータです。

セクタ 1 およびブロック 5コマンドからの読み取りは

new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,
                (byte) 0x00, (byte) 0x05, (byte) 0xD4, (byte) 0x40,
                (byte) 0x01, (byte) 0x30, (byte) 0x05 };

私の関連する完全なコードはここにあります...

私の問題は、特定のセクターからのブロックを「ロック/読み取り専用にする」にはどうすればよいですか?

4

1 に答える 1

5

MIFARE カードの各セクタの認証キーとアクセス条件は、そのセクタの最後のブロック (セクタ トレーラ) にあります。通常の書き込みコマンドを使用して、新しいアクセス条件と認証キーでこのブロックを更新できます。

セクター トレーラーは次のようになります。

+-----------------------------+--------------+----+-----------------------------+
|  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
+-----------------------------+--------------+----+-----------------------------+
|            Key A            | Access Bits  | GP |            Key B            |
|          (6 bytes)          |  (3 bytes)   | B  |          (6 bytes)          |
+-----------------------------+--------------+----+-----------------------------+

したがって、アクセス ビットはバイト 6 ~ 8 にあり、次のようになります。

        +-------+-------+-------+-------+-------+-------+-------+-------+
        | Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 6: | nC2_3 | nC2_2 | nC2_1 | nC2_0 | nC1_3 | nC1_2 | nC1_1 | nC1_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 7: |  C1_3 |  C1_2 |  C1_1 |  C1_0 | nC3_3 | nC3_2 | nC3_1 | nC3_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 8: |  C3_3 |  C3_2 |  C3_1 |  C3_0 |  C2_3 |  C2_2 |  C2_1 |  C2_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+

ここで、nCx_y = Cx_y ではなく、「C1_x、C2_x、C3_x」はブロック x のアクセス条件です。

  • C1_3、C2_3、C3_3: セクター トレーラー (このセクターのブロック 3)
  • C1_2、C2_2、C3_2: このセクターのブロック 2
  • C1_1、C2_1、C3_1: このセクターのブロック 1
  • C1_0、C2_0、C3_0: このセクタのブロック 0

MIFARE 1K データシートで可能なアクセス条件の詳細なリストを見つけることができます: https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf

于 2015-01-12T17:00:46.767 に答える