其他分享
首页 > 其他分享> > ISO 14443 A型卡使用Android读/写

ISO 14443 A型卡使用Android读/写

作者:互联网

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

然后我说要寻找14443标准的APDU.我找到了this page这个有很好的资源.但问题是缺少任何示例APDU.

在stackoverflow中有几个问题和答案与APDU(例如this),我试图没有运气.

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

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

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

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

解决方法:

您正在使用的卡(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的应用程序.

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

>根据AID(应用程序标识符)选择应用程序.就ISO 7816-4而言,可以将AID视为DF名称,并为该特定DF名称发出SELECT命令.
>将任意APDU(根据ISO 7816-4,采用行业间或专有编码)发送到所选应用程序.
>基于Java(实际上基于JavaCard,JavaCard是Java语言的扩展子集)应用程序接收命令,解码并处理它并生成响应.
>卡将应用程序的响应发送回阅读器.

现在有几种可能性:

>该卡是针对特定目的进行预先安装的,并且您没有钥匙可以访问卡管理器.
在这种情况下,您需要知道如何连接卡上的应用程序.理想情况下,应用程序文档会显示您需要选择的AID以及您可以发送的命令.
>该卡是为特定目的预编程的,但您确实有钥匙可以访问卡管理器 – 当然,您不想使用预编程的应用程序但想要使用您自己的应用程序(否则与1.适用相同).
在这种情况下,您可以创建自己的JavaCard应用程序(或使用一些适合您目的的现成应用程序)并将其安装到卡上(例如使用像GPShell这样的开放工具).然后,您可以使用自己定义的界面访问该卡.
>该卡未针对特定目的进行预编程,您可以使用密钥访问卡管理器.
在这种情况下,您唯一的选择是创建自己的应用程序,如2所示.

标签:apdu,smartcard,android,nfc,contactless-smartcard
来源: https://codeday.me/bug/20190725/1531143.html