2

カードにデータを正常に書き込むことができます。誰も私のカードに書き込めないようにしたいのですが、読むことしかできないようにしたいのです。これを達成することは可能ですか?または、カードにデータを書き込む前にパスワード保護を割り当てることができるキーはありますか?

以下を使用してデータを書き込むには:

public void writeTag(Tag tag) {
        MifareUltralight ultralight = MifareUltralight.get(tag);
        String[] mg= getParts(s, 4);

        try {
            ultralight.connect();
            int j=4;
            for (int i = 0; i < mg.length; i++) {

                ultralight.writePage(j, mg[i].getBytes(Charset.forName("US-ASCII")));
                j++;
            }
            Toast.makeText(getApplicationContext(), "Write Done!", Toast.LENGTH_LONG).show()
        } catch (IOException e) {
            Log.e(TAG, "IOException while closing MifareUltralight...", e);
        } finally {
            try {
                ultralight.close();
            } catch (IOException e) {
                Log.e(TAG, "IOException while closing MifareUltralight...", e);
            }
        }
    }

どんな助けでも大歓迎です!

4

1 に答える 1

3

MIFARE Ultralight のロック ビットは、ページ 2 のバイト 2 ~ 3 にあります (NTAG などの Ultralight C および Ultralight の派生物は、他のページに追加のロック ビットがあることに注意してください。その場所については、データシートを参照してください)。各ロック ビットは、メモリ領域の特定のページのロック状態を制御します。ロックを有効にするには、ロック ビットを'1'含むページに対して書き込みコマンドを発行して、ロック ビットを設定する必要があります。したがって、タグ全体をロックする最も単純なシナリオでは、次のようにすることができます。

    // write all-ones to the lock bits on page 0x02
    byte[] result;
    result = ultralight.transceive(new byte[]{
            (byte)0xA2,  // Command: WRITE
            (byte)0x02,  // Address: page 0x02 (2)
            (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF  // Data: set bytes 2-3 to all '1'
    });
于 2015-02-25T07:54:53.520 に答える