【发布时间】:2012-03-12 15:37:40
【问题描述】:
我正在尝试验证 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() 但是.. . 就在发送 transceive() 之前,标签已连接,发送时我收到“标签丢失”警告和“收发失败”。
另外,如果我尝试使用 NfcA 也会出现同样的问题。
最后,如果我在第一个响应后尝试发送一个身份验证命令,我还会收到“标签丢失”警告,并且收发失败。
所以我的问题是:
为什么我发送第二个 transceive() 时 NFC 标签会丢失?
(这似乎不是超时问题,因为在发送第二个 transceive() 之前,连接已使用标签打开) 我在与 UI 不同的线程中制作了所有东西。
提前致谢!
【问题讨论】:
-
我的猜测是响应(第二次发送)没有正确验证并且标签从不响应,因此看起来像标签丢失了手机。尝试多次写入(4 字节写入),看看是否有效。它将是 transcieve(0xA2, 0x06, 0x01, 0x02, 0x03, 0x04) ,其中 0x06 是页码。如果这可行,那么您尝试进行身份验证将是错误的。
-
首先,感谢您的回复:)。阅读后我认为您可能是对的,问题可能是我对身份验证的回复不正确,所以我会尝试您的建议以了解这是否有意义。但是,似乎是一个很好的观点。再次感谢! ;) 我会在这里发布,如果我一实现它就可以写多次。
-
是的,在写了几篇文章后它工作了,所以这似乎是我的身份验证请求的问题。感谢您的帮助,我将检查我的请求程序以找出问题所在。谢谢你的帮助! :)
-
我正在审查我的身份验证算法,发现一个可能是错误的前提。我将所有“0h”用作默认身份验证密钥。这可能是问题吗? - 提前致谢!
-
我一直无法找到有关与 Mifare Ultralight C 进行收发级别通信或身份验证的信息。任何人都可以发布一些材料吗?
标签: android authentication nfc apdu mifare