如何向ISO7816智能卡发送几个任意字节?

问题描述

我有一个可以用作ISO7816智能卡的可编程设备(galaxy Watch),还有另一个可以作为卡终端的可编程设备(Android Smartphone)。不需要使用任何智能卡功能(应该使用的功能),我所需要做的就是从手机向手表发送和接收一些字节。

我有一个有效的实现,可以在手表上注册AID。电话正在发送一条A4(SELECT FILE)指令,指令为P1 = 04和P2 = 00,并且在数据字段中注册了AID。然后,手表会获取回调,并可以使用任意数据对其进行响应。一切正常。

我的问题是:如何扩展它,以便能够向手表发送任意字节的自定义信息?我有太多不同的信息对象,以便为每个对象注册一个单独的AID。我可以以某种方式向该A4或其他命令添加一些任意字节吗?

解决方法

我的答案基于host-based card emulation overview

您似乎已经扩展了HostApduService并实现了processCommandApdu()函数,该函数可以接收在“应用程序”范围内发送的所有APDU(即您要通过AID访问的内容)。

现在,您必须根据ISO7816决定如何建模和封装“少量任意字节的自定义信息”(请参见此处for a nice entry point for reading up on ISO 7816;这里您可以选择

  • 记录要通过读取/更新/追加记录来访问的定向文件
  • 您可以通过READ / UPDATE BINARY访问的
  • 透明文件
  • 您要通过GET / PUT DATA访问的对象

一旦决定了数据组织,就必须启用上述processCommandApdu()来解码相应的APDU并读取/写入“少量任意字节的自定义信息”。