处理方法没有从主机接收到完整的 APDU 命令?
Process method does not receive full APDU command from host?
宿主发送以下指令到小程序到selectEF文件
00 A4 02 00 02 40 01
目的是select ID为40 01
的EF文件(在命令的数据字段中指定)。
但是当我调试 process(APDU apdu) 方法时,APDU 缓冲区只包含前 5 个字节 00 A4 02 00 02
。数据字段设置为 00 00
。所以我的小程序不能 select 使用 EF ID 的 EF。
你能告诉我上面的 APDU 命令有什么问题吗?
根据卡(或仿真器)的不同,APDU 缓冲区可能仅包含 APDU header 字段(CLA、INS、P1、P2、Lc)。即使某些卡自动将命令 APDU 的数据部分填充到 APDU 缓冲区中,您也不能依赖该行为。
相反,您必须通过调用 APDU object 上的 setIncomingAndReceive()
方法来明确指示卡(或仿真器)检索数据部分。但请注意,此方法只能针对情况 3 和情况 4 APDU(即包含命令数据部分的 APDU 命令)调用。如果没有命令数据字段,则不应调用此方法(案例 1 和案例 2 APDU)。
要获取 APDU 缓冲区中的数据,您需要调用 apdu.setIncomingAndReceive()
并且在 EMV 规范中,小程序的 AID 是 5-16 字节,不能使用少于 5 个字节。
宿主发送以下指令到小程序到selectEF文件
00 A4 02 00 02 40 01
目的是select ID为40 01
的EF文件(在命令的数据字段中指定)。
但是当我调试 process(APDU apdu) 方法时,APDU 缓冲区只包含前 5 个字节 00 A4 02 00 02
。数据字段设置为 00 00
。所以我的小程序不能 select 使用 EF ID 的 EF。
你能告诉我上面的 APDU 命令有什么问题吗?
根据卡(或仿真器)的不同,APDU 缓冲区可能仅包含 APDU header 字段(CLA、INS、P1、P2、Lc)。即使某些卡自动将命令 APDU 的数据部分填充到 APDU 缓冲区中,您也不能依赖该行为。
相反,您必须通过调用 APDU object 上的 setIncomingAndReceive()
方法来明确指示卡(或仿真器)检索数据部分。但请注意,此方法只能针对情况 3 和情况 4 APDU(即包含命令数据部分的 APDU 命令)调用。如果没有命令数据字段,则不应调用此方法(案例 1 和案例 2 APDU)。
要获取 APDU 缓冲区中的数据,您需要调用 apdu.setIncomingAndReceive()
并且在 EMV 规范中,小程序的 AID 是 5-16 字节,不能使用少于 5 个字节。