【问题标题】:NFC on Samsung Galaxy Nexus raw MifareClassic authentication三星 Galaxy Nexus 上的 NFC 原始 MifareClassic 身份验证
【发布时间】:2012-09-17 17:45:55
【问题描述】:

我正在尝试使用 Android 的 NFC API 进行原始身份验证(使用收发方法向 MifareClassic 卡发送命令)。但我不断收到所有 NfcA 收发调用的 TagLostException。

这是我的代码:

NfcA mfa = NfcA.get(tagFromIntent);          
//MifareClassic mfa = MifareClassic.get(tagFromIntent);
//IsoDep isodep = IsoDep.get(tagFromIntent);

mfa.connect();       
//manual authenticate
byte[] cmd = new byte[] {0x60, 0x04, 0x00, 0x00};               

try { 
    if(mfa.isConnected()) {
         byte[] result = mfa.transceive(cmd);
    }
} catch (TagLostException e) { 
    Log.i("mifaretest", "tag lost again!");
    throw e; 
} catch (IOException e) { 
    Log.i("mifaretest", "IOException!");
    // No need to deal with, will return false anyway 
} 

mfa.close();    

正如 Google 文档指出的那样:应用程序不得将 EoD (CRC) 附加到有效负载,它将自动计算。我将最后两个字节留空。 我还尝试了以下命令: byte[] cmd = new byte[] {0x60, 0x04};byte[] cmd = new byte[] {0x60, 0x04, 0xD1, 0x3D};

它们都抛出 TagLostException。 任何见解将不胜感激。

【问题讨论】:

    标签: android nfc


    【解决方案1】:

    Android 将 CRC 添加到 transceive 参数的负载中,因此当您发送 {0x60, 0x04} 时,Android 会在发送到卡之前添加相应的 2 个 CRC 字节。然而,这只是故事的一半。 Android 还将检查卡的响应。它将检查响应中的 CRC 并将其剥离。如果响应中的 CRC 不正确,则会抛出异常。

    现在查看MIFARE CLassic datasheet 的第 11.1 节。可以看到这种情况下卡响应不包含CRC,所以会被Android拒绝并抛出异常。

    【讨论】:

    • 这是否意味着原始命令 Transceive 不适用于 Android + MifareClassic?
    • 有没有办法解决这个 Android 限制? Android 正在使用 libnfc-nxp,我是否可以构建该库的修改版本(可能使用不同的名称)并使用 Android NDK 加载该库?在哪个响应 crc 没有检查?而且我不想根我的设备。
    • 如果不root您的设备,您将无能为力。我认为限制不在 libnfc-nxp 中,而是在 Android 的 NFC 管理器中。您可以构建修改后的固件来更改此行为。但是,如果您走这条路,我预计您可能会遇到其他限制,包括 libnfc-nxp 和 NFC 硬件。它们都旨在自动处理 MIFARE 通信。
    • 感谢您的回复!此限制仅适用于 Mifare Classic 吗?如果我使用不同的 NFC 标签(例如 Mifare Desfire 或 Mifare Plus),我可以绕过这个限制吗?或者您是否知道任何其他可以使用 Android 提供的收发方法进行原始身份验证的品牌标签?前提是标签内置了身份验证。
    • 完全支持 MIFARE DESfire。你使用普通的IsoDep.transceive()。如果配置为最高安全级别,IsoDep 也完全支持 MIFARE Plus。
    【解决方案2】:

    IsoDep 类有其可以读取和更改的超时时间。

    对于高要求的加密操作,您绝对应该更改它,因为默认值类似于 300 毫秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      相关资源
      最近更新 更多