您的位置:首页 > 编程语言 > Java开发

使用smartcardio返回6E00解决方法

2017-12-28 14:48 204 查看
在使用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获得正确的返回结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  smartcard java apdu
相关文章推荐