1、标签: ZZ 操作卡片文件命令-读二进制(READ BINARY)1、命令功能描述读二进制命令用于读取二进制文件的全部或者部分内容。每次读取内容在 256Byte 以内,如果需要读取超过 256Byte 的内容的话,需要通过多次操作完成。对二进制文件读取操作前需要满足二进制文件描述块中关于读操作的安全控制的要求。2、命令报文格式命令的 APDU 内容如下所示:b 代码 值/bCLA 0x00INS 0xB0P1 应用控制参数P2 应用控制参数Lc 不存在Data 不存在Le 0x00 或者要读取数据的长度其中:* 如果 P1 的最高位 b8 为 1 时,b6 和 b7 位必须为 0,b5-b1
2、 位表示待读取的 EF 文件的SFI;这时 P2 表示要读取数据起始位置在文件中的偏移量。* 如果 P1 的最高位为 0 时,P1 的后 7 位和 P2 相连共同组成了一个超过 256 的整数,表示待读取数据块的起始位置在文件中的偏移量,可以用于超过 256Byte 文件的读取。* Le 为 00 时,表示读取最大长度,此时最多读取 256Byte。3、响应报文数据响应报文数据为读取的数据,最大长度为 256Byte。4、响应报文状态码此命令执行成功的状态码为 0x9000。对于异常情况,IC 卡可能回送的错误码如下所示:b SW1 SW2 含义/b0x62 0x81 回送的数据中部分内容可能
3、出错0x62 0x82 读取的数据长度小于 Le0x67 0x00 Lc 域为空0x69 0x81 命令和文件格式不相容0x69 0x82 不满足安全状态0x69 0x86 不满足命令执行条件(当前 EF 错误)0x6A 0x81 不支持此功能0x6A 0x82 文件没有找到0x6A 0x86 P1、P2 不正确0x6B 0x00 偏移地址错误0x6D 0x00 INS 错误0x6E 0x00 CLA 错误0x93 0x03 应用永久锁定 5、命令实现的其他要求如果卡片不支持大文件的读写操作,可以不实现超过 256Byte 数据操作。6、命令实现说明如果支持大文件读写操作的话,对文件的读操作将
4、通过一个命令链来完成,命令链的第一条命令中将给出文件的 SFI,并且只能对小于 256Byte 的区域进行读操作,后续命令可以操作超过 256Byte 部分,不需要继续给出文件的 SFI。为了实现这样的功能,在读操作第一条命令成功执行以后,卡片需要记下操作的文件的 SFI,也就是维护一个当前 EF 的标志。对当前 EF 标志最关键的地方在于不继续对该 EF 操作时,必须将标志清除掉。7、命令使用示例(1)预设环境假设有二进制文件,SFI 为 0x05,总长度为 0x400。(2)命令报文读取文件前 256Byte 的 APDU:00 B0 05 00 00其中:* 00 表示 READ BIN
5、ARY 命令的 CLA。* B0 表示 READ BINARY 命令的 INS。* 05 表示 READ BINARY 命令的 P1,为要读取文件的 SFI。* 00 表示 READ BINARY 命令的 P2。* 00 表示 READ BINARY 命令的 Le,即读取的数据长度为最大长度 256Byte。读取文件从 0x150 开始的 0x30Byte 的 APDU:00 B0 81 50 30其中:* 00 表示 READ BINARY 命令的 CLA。* B0 表示 READ BINARY 命令的 INS。* 81 表示 READ BINARY 命令的 P1,高位 1 表示 P1 P2 组成偏移量。* 00 表示 READ BINARY 命令的 P2,P1、P2 组成偏移量 0x150。* 00 表示 READ BINARY 命令的 Le,即读取的数据长度为 0x30Byte。(3)READ BINARY 响应报文卡片处理以后,READ BINARY 的响应报文可以根据应用的具体情况决定。