使用smartcardio返回6E00解决方法

在使用SmartCardIO接口发送APDU指令时,有时指令正确执行,但是却返回6E00这个错误指令。
经过调查发现,使用读卡器直接发送该条指令不会有问题,但是通过SmartCardIO的CardChannel.transmit()指令发送则会返回6E00错误,实际上该指令却正确执行了

下图为使用读卡器发送指令时获取的数据流,可以看到指令发送出去后(第一个OUT)会获得正确返回结果6118(第二个IN)(注:61**表示返回数据长度为**,方便获取返回结果),然后读卡器发送指令00C0000018去取返回结果(第二个OUT),最后获得返回结果(第三个IN),从末尾的9000可以判断该指令被正确执行。
读卡器数据流

让人头疼的来了,如果使用SmartCardIO中相关接口去发送该指令,你会发现上面指令竟然返回6E00
如下图所示数据流,指令正确发送了,获得的返回数据流长度也是对的(6118),然后发送80C0000018获得指令执行后的数据,获得的数据末尾为6E00(第3个IN)。
这里写图片描述

为什么同一条语句,使用不同的方式执行会出现问题呢?
通过上面对比,可以肯定指令是没有问题的,而且无论第一第二种方式,都可以通过测试验证指令确实正确执行了(你可以发送其它指令读取标志位判断)。既然指令正确执行,为啥smartcardio获得的返回结果竟然是6E00?可以看到,在获取APDU实际返回结果时,指令稍有不同。读卡器发送的是00C0000018,而smartcardio发送的是80C0000018,这就是问题所在了。

解决方法:
通过在smartcardio中手动发送00C0000018获得正确的返回结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值