繁体   English   中英

ISO 14443 A型卡使用Android读/写

[英]ISO 14443 Type A Card Read/Write using Android

我正在尝试编写一个Android应用程序来读取/写入支持ISO 14443 A类标准的NFC卡。 经过彻底的搜索后,似乎现在唯一的选择是通过发送APDU命令来使用IsoDep类及其收发方法。 我的卡是支持ISO 14443和ISO 7816标准的SmartCafe双接口卡。

然后我说要寻找14443标准的APDU。 我发现这个页面有很好的资源。 但问题是缺少任何示例APDU。

在stackoverflow中有几个问题和答案与APDU(例如这个 ),我试过没有运气。

强力尝试通过选择命令显示以下结果: 6F108408A000000003000000A5049F6501FF9000 ,它看起来像卡的文件控制信息。 但我正在努力解释这些信息。

我也在努力解决使用该卡的问题。 到目前为止,我已经明白:

  1. 我需要选择一个文件和
  2. 然后从文件中读取或写入文件。

该卡是新的,可能没有除文件控制信息之外的任何其他文件或信息。 那么哪个PDU可用于在特定位置创建文件,哪个PDU可用于从该文件中读取?

您正在使用的卡(SmartCafe双接口)是一个JavaCard。

您尝试的SELECT命令必须是这样的:

00 A4 04 00 00

要么

00 A4 04 00 08 A000000003000000 00

您在响应SELECT命令时看到的是GlobalPlatform卡管理器的FCI:

6F 10 
  84 08 
    A000000003000000
  A5 04 
    9F65 01 
      FF 
9000 

对于这种类型的卡,默认情况下文件的概念并不存在(因此只选择一个文件并读取/写入它通常不起作用)。 相反,此卡包含可以使用APDU命令进行交互的基于Java的应用程序。

因此,与应用程序交互的典型流程是:

  1. 基于其AID(应用程序标识符)选择应用程序。 就ISO 7816-4而言,可以将AID视为DF名称,并为该特定DF名称发出SELECT命令。

  2. 将任意APDU(根据ISO 7816-4,采用行业间或专有编码)发送到所选应用程序。

  3. 基于Java(实际上基于JavaCard,JavaCard是Java语言的扩展子集)应用程序接收命令,解码并处理它并生成响应。

  4. 卡将应用程序的响应发送回阅读器。

现在有几种可能性:

  1. 该卡是针对特定目的进行预先安装的,您没有钥匙可以访问卡管理器。
    在这种情况下,您需要知道如何连接卡上的应用程序。 理想情况下,应用程序文档会显示您需要选择的AID以及您可以发送的命令。

  2. 该卡是为特定目的预编程的,但您确实有钥匙可以访问卡管理器 - 当然,您不想使用预编程的应用程序但想要使用您自己的应用程序(否则相同)如1.适用)。
    在这种情况下,您可以创建自己的JavaCard应用程序(或使用一些适合您目的的现成应用程序)并将其安装到卡上(例如使用像GPShell这样的开放工具)。 然后,您可以使用自己定义的界面访问该卡。

  3. 该卡没有预先编程为特定目的和有访问卡管理的关键。
    在这种情况下,您唯一的选择是创建自己的应用程序,如2所示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM