如何向 ISO7816 智能卡发送少量任意字节?

How to send few arbitrary bytes to a ISO7816 smart card?

我有一个可编程设备 (Galaxy Watch) 可以充当 ISO7816 智能卡,我还有另一个可编程设备 (Android Smartphone) 可以充当卡终端。不需要任何智能卡功能,因为它应该被使用,我需要做的就是从 phone 向手表发送和接收几个字节。

我有一个可以在手表上注册 AID 的工作实现。 phone 正在发送一条 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 并读/写“自定义信息的几个任意字节”。