【发布时间】:2014-01-30 15:26:00
【问题描述】:
我正在制作一个使用 ISO-DEP (ISO 14443-4) 作为 TagTechnology 的 NFC 应用程序。 我尝试使用 DESFire EV1 执行身份验证。
如果命令的链接没有暂停,则身份验证工作良好。
但是,例如,我做了一些需要时间的事情(例如 NATIVE_AUTHENTICATION_COMMAND_P1 之后的 Thread.Sleep),我在卡的身份验证命令第 2 部分期间收到错误 0x911C(“不支持命令代码”)。 通常,取消身份验证时会出现错误。就像卡在身份验证过程中收到另一个命令一样。
问题是我的应用程序除了发送 selectApplication、Authentication Part 1、Sleep 和 Part 2 之外什么也没做。 我在 C++ 中使用 PCSC 阅读器尝试了相同的代码,睡眠不是问题,即使睡眠 5 秒,身份验证也可以在我的计算机上运行。 因此,我想知道即使在向应用程序提供 Intent 之后,Android 是否仍在“玩”卡,或者帧等待时间(ISO 14443-4)是否不起作用或 NDEF“拉”破坏了身份验证或......
(NATIVE_AUTHENTICATION_COMMAND_P2的值就是一个例子)
final byte[] NATIVE_AUTHENTICATION_COMMAND_P1 = new byte[]{(byte)0x90, (byte)0x0A, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00};
final byte[] NATIVE_AUTHENTICATION_COMMAND_P2 = new byte[]{(byte)0x90, (byte)0xAF, (byte)0x00, (byte)0x00, (byte)0x10, (byte)0xAB, (byte)0xB4, (byte)0x66, (byte)0xA4, (byte)0xE9, (byte)0x99, (byte)0xFF, (byte)0x5C, (byte)0xD7, (byte)0xF3, (byte)0xA7, (byte)0x81, (byte)0x62, (byte)0x2F, (byte)0xFA, (byte)0x16, (byte)0x00};
final byte[] NATIVE_SELECT_COMMAND = new byte[]{(byte)0x90,(byte)0x5A,(byte)0x00,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
IsoDep tag = IsoDep.get(tagFromIntent);
tag.connect();
byte[] result;
result = tag.transceive(NATIVE_SELECT_COMMAND); //SUCCESS
result = tag.transceive(NATIVE_AUTHENTICATION_COMMAND_P1); //SUCCESS
// Thread.sleep(1000);
result = tag.transceive(NATIVE_AUTHENTICATION_COMMAND_P2); //result = 0x90AE without Sleep and with Sleep 0x911C ("Command code not supported")
tag.close();
如果有人因为我完全迷路而有想法:)
更新: 在 michael-roland 和他的提示的帮助下;我已经使用带有 NDEF 检查禁用的阅读器模式 API 并将存在检查延迟到 10 秒,以使我的链接命令完美运行!
@Override
protected void onResume() {
super.onResume();
Bundle options = new Bundle();
options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 10000);
mAdapter.enableReaderMode(this, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, options);
}
@Override
public void onPause() {
super.onPause();
mAdapter.disableReaderMode(this);
}
【问题讨论】:
-
您使用什么设备?我猜是博通的 NFC 芯片组,对吧?
-
我使用的是 Nexus 4,所以通常它是 Broadcom 的 BCM20793S。
标签: android authentication nfc chaining mifare