APDU的全称为Application Protocol Data Unit,应用协议数据单元,用于IC智能卡的通讯协议。
命令APDU如上图所示,包含头和主体两个部分。头部包括CLA、INS、P1、P2。CLA和INS说明了应用的分类和指令,P1、P2作为指令的具体描述。APDU的主体长度是可变的,它可以作为命令的一部分从读卡器传送数据到卡片内,Lc说明了作为数据传送到卡片上的数据的长度,Data Field是作为数据域。Le是期望卡片返回的指令的长度。
APDU的可以有以下结构:
1. CLA-INS-P1-P2 没有数据要发送至卡片,没有数据从卡片上返回。
2. CLA-INS-P1-P2-Le 没有数据要发送至卡片,有数据从卡片上返回。
3. CLA-INS-P1-P2-Lc-Data Field 有数据要发送至卡片,没有数据从卡片上返回。
4. CLA-INS-P1-P2-Lc-Data Field-Le 有数据要发送至卡片,有数据从卡片上返回。
响应APDU如上图所示,包含主体和尾部两个部分。主体为Data Field,主体可以为空,也可以包含数据域,数据域的长度由命令APDU的Le决定。尾部包括两个部分SW1、SW2,此为返回状态吗,一个字节用来说明错误类型,另一个字节 用来说明具体的命令状态或错误标识。