5

我正在尝试验证 Mifare Ultralight C(兼容 ISO/IEC 14443-2 和 14443-3 A 型)标签。

我使用 Android 中提供的 MifareUltralight.transceive() 函数发送身份验证命令。我还检查了 NfcA.transceive()(IsoDep 似乎与这种标签不兼容,因为该对象用于处理 ISO/IEC 14443-4 标签,这就是我不使用 IsoDep.transceive() 的原因)。

因此,当我第一次发送身份验证请求命令时,标签用 AFxxxx 回答 transceive() ..... 我在其中处理标签答案,然后我发送另一个带有对该答案的响应的 transceive() 但是......就在之前发送收发器()标签已连接,发送时我收到“标签丢失”警告和“收发失败”。

另外,如果我用 NfcA 尝试它,也会发生同样的问题。

最后,如果我在第一个响应之后尝试发送一个身份验证命令,我还会收到一个“标签丢失”警告,收发失败。

所以我的问题是:

为什么我发送第二个 transceive() 时 NFC 标签会丢失?<<

(这似乎不是超时问题,因为就在发送第二个 transceive() 之前,连接已使用标签打开)我在与 UI 不同的线程中制作了所有东西。

提前致谢!

4

2 回答 2

3

你的方法似乎是正确的。但是,标签的行为表明您对标签的回答不正确。在这种情况下,标签拒绝回答。从手机的角度来看,这与标签消失没有什么区别,所以你得到一个TagLostException.

于 2012-03-13T08:56:47.227 回答
0

对我来说这是同样的问题,但后来它以奇怪的方式解决了

步骤 1: pass1 1A00 命令到卡

第 2 步:能够检索 pass1 响应挑战

第 3 步:算法计算步骤 任意(假设此时标签丢失)并从设备中丢失一种合理的标签

第 4 步:通过 2 与 AFxxxxx 引发异常收发失败,但到那时如果我检查标签丢失已经!!!

在挣扎了几天之后,我的一位同事要求我尝试减少 pass1 到 pass2 之间的任何延迟,它花了将近 1-1.5 秒,而在这之间它失败了。

我删除了中间写入的所有日志,并在 pass1 后 500 毫秒内进行了简单的快速调用,我们来了,奇怪的工作正常!!!!

可能是出于某种原因,卡技术具有某些安全目的,或者我不知道仍在尝试调查。

希望这会有所帮助。

于 2021-10-07T14:47:34.910 回答