JavaCard中如何正确获取CryptoException原因码以发送特定APDU?
JavaCard中正确捕获CryptoException并判断错误码的方法
你的几种写法都存在逻辑错误,原因如下:
- 第一种写法错误:
CryptoException.ILLEGAL_USE是short类型的错误码常量,不是类实例,不能用instanceof做类型判断 - 第二种写法错误:直接将Exception对象
e和short值比较,对象与基本类型类型不匹配,永远不会相等 - 第三种写法错误:同样是将Exception对象和short常量直接比较,类型不匹配,逻辑不成立
正确的做法是调用CryptoException的getReason()方法获取对应的错误码,再与目标常量对比:
catch (CryptoException e) { short errorCode = e.getReason(); if (errorCode == CryptoException.ILLEGAL_USE) { // 此处编写发送特定APDU的逻辑 // 示例:返回自定义状态字 ISOException.throwIt((short)0x9001); } }
补充说明:
CryptoException的所有错误码都是short类型的常量,比如ILLEGAL_USE对应值为(short)0x0005,使用常量名比硬编码数值更易维护- 发送APDU响应通常可以通过
ISOException.throwIt(short statusWord)返回状态字,或借助APDU对象的sendBytes()等方法发送数据内容
内容的提问来源于stack exchange,提问作者LozCodes
相关产品推荐
相关产品推荐

