gpt4 book ai didi

android - 三星 Galaxy Nexus 上的 NFC 原始 MifareClassic 身份验证

转载 作者:搜寻专家 更新时间:2023-11-01 09:05:10 25 4
gpt4 key购买 nike

我正在尝试使用 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();

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

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

最佳答案

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

现在看看 MIFARE CLassic datasheet 的第 11.1 节.可以看到本例中卡片响应不包含CRC,因此会被Android拒绝并抛出异常。

关于android - 三星 Galaxy Nexus 上的 NFC 原始 MifareClassic 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com