标签:apdu smartcard android nfc contactless-smartcard
我正在尝试编写一个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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。