Java 阅读NfcA Mifare经典NFC标签

Java 阅读NfcA Mifare经典NFC标签,java,android,nfc,mifare,Java,Android,Nfc,Mifare,我有不同的标签: 亚马逊标签:NfcA 我的钥匙:NfcA 一些广告标签:NfcA、Ndef、MifareUltraLight 我想读出我的钥匙。UID是2066 be 52,ATQA是0040SAK是0008(ATQA和SAK与Amazon密钥相同,所以我猜它也是Mifare经典1KB) 每当我尝试收发(byte[])时,我就会捕捉到标记性异常。有趣的事实:广告标签效果更好,但仍然抛出IOException:Transceive失败 尝试将标记(用于我的密钥)解析为IsoDep或Mifa

我有不同的标签:

  • 亚马逊标签:NfcA
  • 我的钥匙:NfcA
  • 一些广告标签:NfcA、Ndef、MifareUltraLight
我想读出我的钥匙。UID是
2066 be 52
,ATQA是
0040
SAK是
0008
(ATQA和SAK与Amazon密钥相同,所以我猜它也是Mifare经典1KB)

每当我尝试
收发(byte[])
时,我就会捕捉到
标记性异常。有趣的事实:广告标签效果更好,但仍然抛出
IOException:Transceive失败

尝试将标记(用于我的密钥)解析为
IsoDep
MifareClassic
会抛出一个
Nullpointer
。只有
NfcA
起作用,但我无法从标签中读取任何数据

有人能提供我的有效命令或任何其他方式来读取Android的内容吗

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

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

好,现在很清楚:Nexus 4不支持MIFARE Classic(例如MIFARE Ultralight works)

可以读取UID、ATQA和SAK,但它不能写入或读取块/扇区


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

对。它不支持它不是因为它不符合NFC论坛,而是因为它使用了专有的加密算法(Crypto 1)Broadcom和Google不想授权。在使用NXP NFC控制器(Nexus S、Galaxy Nexus等)的设备上,您可以免费获得该许可,因为硬件支持它。通常,您需要检查结果
SomeNfcTech.get()
为空,因为并不是所有的都能保证得到支持。此外,Crypto 1算法完全被破坏了,在新项目中使用Classic真的没有理由。我也不会为完全破坏的crypo支付许可费。Mifare Classic的消失对NFC技术来说是件好事。理论上可能吗在Android设备上重新在软件中实现Crypto 1(可能是通过修改NFC软件堆栈/驱动程序,还是必须在NFC硬件上实现?