使用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获得正确的返回结果
经过调查发现,使用读卡器直接发送该条指令不会有问题,但是通过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获得正确的返回结果
相关文章推荐
- SkinMagic使用后按钮加自定义图标或菜单GetMneu返回NULL的解决方法
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
- springmvc使用@ResponseBody返回json乱码解决方法
- 使用jdbc调用oracle b294 存储过程(返回cursor)的错误及解决方法- -
- 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法
- FireFox中使用JQuery的ajaxfileupload插件返回JSON格式数据提示保存的解决方法。
- 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法
- 使用ajax请求 返回Json出现乱码解决方法
- Nginx使用ngx_zeromq模块返回502错误的解决方法
- 使用mybatis操作mysql数据库SUM方法返回NULL解决
- SkinMagic使用后按钮加自定义图标或菜单GetMneu返回NULL的解决方法
- dom4j使用XPath解析XML返回null的解决方法
- 返回顶部的3中方法(解决移动端使用zepto没有滑动的效果)
- 使用mybatis操作mysql数据库SUM方法返回NULL解决
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- IOCP中使用getpeername出错,返回10014的解决方法。
- Java后台使用get方式远程跨域请求,返回数据为中文乱码解决方法
- 关于使用widget的getAppWidgetIds方法返回空数组的解决方法
- iOS 使用C下的iconv方法对Emoji表情转码,从UTF8到GBK,带表情字符串转码后返回结果为空,的解决办法。
- springmvc使用@ResponseBody返回json乱码解决方法