ISO 14443 A型卡使用Android读写

ISO 14443 A型卡使用Android读写,第1张

概述我正在尝试编写一个Android应用程序来读取/写入支持ISO14443A类标准的NFC卡.经过彻底的搜索后,似乎现在唯一的选择就是通过发送APDU命令来使用IsoDep类及其收发方法.我的卡是支持ISO14443和ISO7816标准的SmartCafe双接口卡.然后我说要寻找14443标准的APDU.我找到了thispage这

我正在尝试编写一个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所示.

总结

以上是内存溢出为你收集整理的ISO 14443 A型卡使用Android读/写全部内容,希望文章能够帮你解决ISO 14443 A型卡使用Android读/写所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存