我正在尝试编写Android应用程序来读取/写入支持ISO 14443 A类标准的NFC卡。经过彻底的搜索后,似乎现在唯一的选择是通过发送APDU命令来使用IsoDep类及其收发方法。我所拥有的卡是支持ISO 14443和ISO 7816标准的SmartCafe双接口卡。
然后我说要为14443标准寻找APDU。我发现this page有一个很好的资源。但问题是缺少任何示例APDU。
在stackoverflow中,APDU(例如this)有几个问题和答案,我试过没有运气。
强力尝试通过选择命令显示以下结果: 6F108408A000000003000000A5049F6501FF9000 ,它看起来像卡的文件控制信息。但我正在努力解释这些信息。
我也在努力解决使用该卡的问题。到目前为止,我已经明白了:
该卡是新的,可能没有除文件控制信息之外的任何其他文件或信息。那么哪个PDU可用于在特定位置创建文件,哪个PDU可用于从该文件中读取?
答案 0 :(得分:8)
您正在使用的卡(SmartCafe双界面)是一个JavaCard。
您尝试的SELECT命令必须类似于:
00 A4 04 00 00
或
00 A4 04 00 08 A000000003000000 00
您在回应SELECT命令时看到的是GlobalPlatform卡管理器的FCI:
6F 10 (FCI template) 84 08 (Application DF name) A000000003000000 A5 04 (Proprietary data) 9F65 01 (Maximum length of data field in command message) FF (256) 9000 (status=no error)
使用这种类型的卡,默认情况下文件的概念并不存在(因此只选择一个文件并读取/写入它通常不起作用)。相反,此卡包含可以使用APDU命令进行交互的基于Java的应用程序。
因此,与应用程序交互的典型流程是:
根据应用程序标识符(应用程序标识符)选择应用程序。就ISO 7816-4而言,可以将AID视为DF名称,并为该特定DF名称发出SELECT命令。
向选定的应用程序发送任意APDU(根据ISO 7816-4,采用行业间或专有编码)。
基于Java(实际上是基于JavaCard的JavaCard是Java语言的扩展子集)应用程序接收命令,对其进行解码和处理并生成响应。
该卡将应用程序的响应发送回阅读器。
现在有几种可能性:
该卡是针对特定目的进行预先安装的,但您没有钥匙可以访问卡片管理器。
在这种情况下,您需要知道如何连接卡上的应用程序。理想情况下,应用程序文档会显示您需要选择的AID以及您可以发送的命令。
该卡已针对特定目的进行了预编程,但您 拥有访问卡片管理器的密钥 - 当然,您不希望使用预先编程应用程序,但想使用您自己的应用程序(否则与1.适用) 在这种情况下,您可以创建自己的JavaCard应用程序(或使用一些适合您目的的现成应用程序)并将其安装到卡上(例如使用GPShell等开放工具)。然后,您可以使用自己定义的界面访问该卡。
该卡未为特定目的预编程,您 有钥匙可以访问卡片管理器。
在这种情况下,您唯一的选择是创建自己的应用程序,如2。