PCSC读取智能卡时ReadBinary APDU始终返回0x67无效长度求助
问题分析与解决
核心原因:APDU格式与Case类型错误
SW1=0x67、SW2=0x00的本质是卡片检测到APDU的长度参数(LE)格式无效,你的问题出在三个关键点:
错误的APDU Case类型
ReadBinary指令(INS=0xB0)属于「命令无数据、响应返回数据」的类型,对应APDU的Case 2,但你设置了IsoCase: Case4Short(Case4是命令带数据且响应带数据的场景),这会导致APDU结构被错误构造,触发卡片的长度校验失败。实际发送的APDU冗余字节
从你给出的命令序列看,ReadBinary命令是00-B0-00-00-00-00(6字节),但Case2的APDU结构仅为CLA INS P1 P2 LE(5字节),多出来的最后一个00是完全冗余的,这直接导致卡片判定LE参数无效。LE参数的错误尝试
你尝试的「文件长度+4」完全没有依据,LE应设置为你期望读取的字节数:要么是0(部分卡片支持读取全文件长度),要么是文件实际长度的十六进制值(84字节对应0x54)。
具体修正步骤
修改APDU的Case类型
将IsoCase设置为Case2Short,匹配ReadBinary指令的交互逻辑。构造正确的ReadBinary命令
- 读取全文件内容(用LE=0):
00 B0 00 00 00 - 读取指定长度(直接用文件实际长度84=0x54):
00 B0 00 00 54
- 读取全文件内容(用LE=0):
修正后的完整命令序列
00-A4-00-00-02-3F-00-00 : 9000 // 选中MF 00-A4-00-00-02-2F-06-00 : 9000 // 选中目标EF 00-B0-00-00-00 : 9000 // 读取全文件(或替换为00-B0-00-00-54)
补充说明
如果部分卡片不支持LE=0读取全长度,直接使用文件实际长度0x54作为LE值即可——84字节远小于绝大多数智能卡单次允许读取的最大长度(通常≤256字节),不会触发长度超限问题。
内容的提问来源于stack exchange,提问作者HCL
相关产品推荐
相关产品推荐

