没有来自MIFARE CLASSIC的回复

时间:2012-05-02 14:32:46

标签: android authentication nfc

我正在尝试验证MIFARE经典卡的任何部分。我正在使用twinlinx mymax贴纸(这使得几乎所有蓝牙设备都支持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 Classic键,这些标签来自工厂。发送到标记的完整命令(以字节为单位)为:

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

任何想法?标签似乎没有响应...尝试访问其他经典标签但也没有成功。谢谢!

1 个答案:

答案 0 :(得分:0)

使用不公开的SDK很难说你做错了什么。但是,API看起来很熟悉,所以无论如何我都会尝试一下。我可以想到你可以尝试的一些事情(按可能性的降序排列):

  1. UID字节的顺序可能不正确,因此请尝试将它们反转。
  2. 也许Answer不仅包含UID,还包含其他字节(例如SAK),并且您正在从中复制错误的字节。
  3. 您拥有的MIFARE Classic标签可能有7个字节的UID,而您没有使用正确的4个字节。
  4. 可能是TR.SendCommandPropAndWaitResponse()使用的错误方法。也许MIFARE Classic有专门的方法。
  5. MyMax贴纸可能不支持MIFARE Classic。我没有在他们的网站上看到他们明确的确认。但是,有迹象表明他们的解决方案基于恩智浦硬件,它始终支持MIFARE Classic。