0

MIFARE クラシック カードの任意のセクターを認証しようとしています。私は Twinlinx mymax ステッカーを使用しています (これにより、ほぼすべての Bluetooth デバイスで NFC が有効になります)。接続された NFC タグにコマンドを送信します。すでに Ultralight C タグで接続してデータを送受信しましたが、今のところ Mifare Classic へのアクセスに成功していません。これが私の認証コードです:

    private boolean authenticate(int sector, byte[] key, boolean keyA) {

    byte[] cmd = new byte[12];

    // First byte is the command
    if (keyA) {
        cmd[0] = 0x60; // phHal_eMifareAuthentA
    } else {
        cmd[0] = 0x61; // phHal_eMifareAuthentB
    }

    // Second byte is block address
    cmd[1] = (byte) 0x03;

    // Next 6 bytes are the key
    System.arraycopy(key, 0, cmd, 2, 6);

    // Next 4 bytes is the UID
    System.arraycopy(Answer, 3, cmd, 8,4);

    byte[] test = null;

    //this makes a connection to the NFC tag (and this works)
    TR.ConnectToExternalCard(AUTH, (byte)0x00);

    //checking if the tag is still connected
    if (TR.isCardPresent() == true){

    //sending command to authenticate
    test = TR.SendCommandPropAndWaitResponse(cmd, (byte) 0x00);
    }

    try {
        if (test != null) {

            return true;
        }
    } 

私は標準の MIFARE クラシック キーを使用しています。タグは工場から出荷されたばかりです。タグに送信される完全なコマンド (バイト単位) は次のとおりです。

[0x60、0x3、0xff、0xff、0xff、0xff、0xff、0xff、0xf3、0xf4、0xa9、0xfb]

何か案は?タグが応答していないようです... 他のクラシック タグにアクセスしようとしましたが、成功しませんでした。ありがとう!

4

1 に答える 1

0

公開されていない SDK を使用して何が間違っているのかを判断するのは困難です。ただし、API は十分に見慣れているように見えるので、とにかく試してみます。あなたが試すことができるいくつかのことを考えることができます(可能性の降順で):

  1. UID バイトの順序が間違っている可能性があるため、逆にしてみてください。
  2. おそらくAnswer、UID だけでなく、他のバイト (SAK など) も含まれており、そこから間違ったバイトをコピーしています。
  3. あなたが持っている MIFARE クラシック タグには 7 バイトの UID があり、そこから正しい 4 バイトを使用していない可能性があります。
  4. TR.SendCommandPropAndWaitResponse()使用方法が間違っている可能性があります。MIFARE Classic 専用の方法があるのか​​もしれません。
  5. MyMax ステッカーは、MIFARE Classic をサポートしていない可能性があります。彼らのウェブサイトで、彼らがそうしていることを明示的に確認していません。ただし、彼らのソリューションは、MIFARE Classic を常にサポートする NXP ハードウェアに基づいていることが示されています。
于 2012-05-02T21:46:46.153 に答える