ISO 14443 A 型卡使用 Android 读/写
Posted
技术标签:
【中文标题】ISO 14443 A 型卡使用 Android 读/写【英文标题】:ISO 14443 Type A Card Read/Write using Android 【发布时间】:2014-03-25 22:47:14 【问题描述】:我正在尝试编写一个 android 应用程序来读取/写入支持 ISO 14443 Type A 标准的 NFC 卡。经过彻底的搜索,我现在唯一的选择似乎是通过发送 APDU 命令来使用 IsoDep 类及其收发方法。我的卡是支持 ISO 14443 和 ISO 7816 标准的 SmartCafe 双接口卡。
然后我说要寻找符合 14443 标准的 APDU。我发现this page 有一个很好的资源。但是,问题是缺少任何示例 APDU。
*** 中有几个关于 APDU(例如 this)的问题和答案,但我没有成功。
蛮力尝试使用选择命令显示以下结果: 6F108408A000000003000000A5049F6501FF9000 这看起来像是卡的文件控制信息。但我正在为如何解释这些信息而苦苦挣扎。
我也在努力处理使用卡片的流程。到目前为止我已经明白了:
-
我需要选择一个文件,然后
然后从文件中读取或写入文件。
卡是新卡,除了文件控制信息外,可能没有任何其他文件或信息。那么哪个 PDU 可以用于在特定位置创建文件,哪个 PDU 可以用于从该文件中读取呢?
【问题讨论】:
【参考方案1】:您使用的卡(SmartCafe 双接口)是 JavaCard。
您尝试的 SELECT 命令一定是这样的:
00 A4 04 00 00或
00 A4 04 00 08 A000000003000000 00您在响应该 SELECT 命令时看到的是 GlobalPlatform 卡管理器的 FCI:
6F 10 (FCI 模板) 84 08 (应用程序 DF 名称) A000000003000000 A5 04 (专有数据) 9F65 01 (命令消息中数据字段的最大长度) FF (256) 9000 (状态=无错误)对于这种类型的卡,文件的概念在默认情况下并不存在(因此仅选择一个文件并对其进行读/写通常不会起作用)。相反,此卡包含基于 Java 的应用程序,您可以使用 APDU 命令与之交互。
因此,与应用程序交互的典型流程是:
根据 AID(应用程序标识符)选择应用程序。根据 ISO 7816-4,AID 可以被视为 DF 名称,您可以针对该特定 DF 名称发出 SELECT 命令。
向选定的应用程序发送任意 APDU(根据 ISO 7816-4,具有跨行业或专有编码)。
基于 Java(实际上是基于 JavaCard,其中 JavaCard 是 Java 语言的扩展子集)的应用程序接收命令,对其进行解码和处理并生成响应。
卡将应用程序的响应发送回读卡器。
现在有几种可能:
该卡已针对特定目的进行了预编程,您没有访问卡管理器的密钥。 在这种情况下,您需要知道如何连接卡上的应用程序。理想情况下,应用程序文档会告诉您需要选择什么 AID 以及可以发送什么命令。
卡已针对特定目的进行了预编程,但您确实拥有访问卡管理器的密钥 - 当然,您不想使用预已编程的应用程序,但想使用您自己的应用程序(否则与 1. 中的应用程序相同)。 在这种情况下,您可以创建自己的 JavaCard 应用程序(或使用一些适合您目的的现成应用程序)并将其安装到卡上(例如,使用像 GPShell 这样的开放工具)。然后就可以使用自己定义的接口访问卡了。
卡没有针对特定目的进行预编程,您确实拥有访问卡管理器的密钥。 在这种情况下,您唯一的选择就是创建自己的应用程序,如 2 所示。
【讨论】:
太好了,这正是我需要知道的。在线提供的教程都没有您对 FCI 的回答那么具体。而且,GPSShell 会派上用场。非常感谢。 很好的答案,对初学者很有帮助!谢谢老哥!以上是关于ISO 14443 A 型卡使用 Android 读/写的主要内容,如果未能解决你的问题,请参考以下文章
ISO-IEC 14443 Type A&B summary
NFC 标签 ISO 14443-3A 类型的读取标签命令是啥