读取NfcA MifareClassic NFC标签

3

我有不同的标签:

我想读取我的钥匙。 UID是20 66 be 52,ATQA是00 40,SAK是00 08(ATQA和SAK与亚马逊钥匙相同,因此我猜它也是Mifare Classic 1KB)

每当我尝试transceive(byte[])时,都会捕获TagLostException。有趣的事实:广告标签效果更好,但仍会抛出IOException: Transceive failed

尝试将标签(用于我的钥匙)解析为IsoDepMifareClassic会引发Nullpointer。只有NfcA有效,但我无法从标签中读取任何数据。

有人能够提供有效的命令或任何其他方法来从Android中读取内容吗?

MifareClassic mfc = MifareClassic.get(tagFromIntent);
mfc.connect(); //Nullpointer

编辑:似乎问题可能出在我的Nexus 4手机上(主要是为了NFC的应用而购买的:()它似乎不支持MIFARE经典标签。但如果你仍然有想法,请写下来。

1个回答

3

现在很清楚:Nexus 4不支持MIFARE Classic(例如,MIFARE Ultralight可以使用)

它可以读取UID、ATQA和SAK,但无法从块/扇区中读取或写入。

令人遗憾的是,像Nexus 4(以及Nexus 10)这样的高端/旗舰设备无法读取最流行的标签。


1
没错。它不支持它并不是因为它不符合NFC论坛的标准,而是因为它使用了专有的加密算法(Crypto 1),Broadcom和Google不想授权。在具有NXP NFC控制器(Nexus S,Galaxy Nexus等)的设备上,您可以免费获得它,因为硬件支持它。通常,您需要检查结果SomeNfcTech.get()是否为空,因为并不是所有技术都保证被支持。 - Nikolay Elenkov
1
此外,Crypto 1算法已经完全破解,因此没有理由在新项目中继续使用Classic。 - Nikolay Elenkov
1
我也不会为一个完全失效的加密算法支付许可费用。Mifare Classic的淘汰对于NFC技术来说是一件好事。 - Nils Pipenbrinck
1
从理论上讲,在Android设备上重新实现Crypto 1是否可能(可能通过修改NFC软件堆栈/驱动程序),或者必须在NFC硬件上实现? - lxgr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接