【发布时间】:2016-06-09 10:40:36
【问题描述】:
我有一个可以在联系人卡片上正常工作的小程序。现在我有一个双接口卡(IDCore 3020),我通过接触接口将我的小程序加载到它。我还有一个非接触式智能卡读卡器(acr122u),我想通过非接触式接口发送 APDU 命令并获得响应 APDU。我像这样将 SelectApplet APDU 发送到卡,但我失败了(SW = 6300):
00 A4 04 00 09 [A0,00,00,03,08,00,00,10,00] 00
我有三个问题:
1- 我可以在非接触模式下使用我的小程序,比如与相同的 APDU 联系吗?
2- 我应该做些什么来让非接触式读卡器识别我的卡吗?
3- 当前适用于接触卡的微型驱动程序是否也适用于非接触卡?
【问题讨论】:
-
63 00是响应 SELECT 命令的一个相当少见的错误代码,但它是 ACR122U 经常使用的错误代码来指示一般错误。可能是您的读卡器(尚未)检测到该卡吗?您的阅读器是否启用了 ISO 14443 Type A / Type B 的“自动 PICC 轮询”和“自动 ATS 生成”(某些版本的 ACR122U 默认不启用此功能)? -
您是否在小程序选择期间使用
APDU.getProtocol()来过滤访问?您的卡是否实施了全球平台修正案 C(AFAIK IDCore 3020 没有,但我不确定......)?使用非接触式界面选择任何其他应用程序(例如 ISD)是否有效? -
感谢迈克尔的回复。这是真的,我的读卡器还没有检测到这张卡。我可以通过followong apdu获取阅读器固件:FF 00 48 00 00 [] 00,但是当我想通过以下命令获取picc参数时:FF 00 50 00 00 [] 00,我失败了,它返回6300,也是当我想要的时候通过以下命令设置这些参数:FF 00 51 00 00 [] 00,它也返回 6300。为什么会这样?
-
谢谢vlp。不是在选择小程序中没有用于非接触式界面的过滤器。我用 Mifare1K 的交通卡测试读卡器并发送以下命令:FF 00 00 00 02 [D4,04] 00 以获取非接触式接口的当前设置,读卡器返回 D5 05 00 00 00 80 90 00 这意味着有字段中没有标签。我必须提到,我的 android 手机使用开源应用程序检测到了我的 mifare1K。
-
这很奇怪(我假设您实际上并没有发送 Lc = 0x00 和 Le = 0x00,但实际上意味着您不发送 Lc(因为它为零)并且只发送 Le 作为 0x00 (表示最多 256 字节的响应数据),对吧?)。然后您可以尝试手动轮询标签(轮询命令:FF 00 00 00 07 [D4 60 FF 01 10 20 23])。
标签: applet javacard contactless-smartcard