使用TapLinx SDK实现EV3卡近距检测时遇数组越界异常求助
问题:TapLinx SDK 实现EV3卡近距检测时抛出数组索引越界异常
我在Android平台使用TapLinx SDK为EV3卡实现近距检测功能,运行应用时始终抛出“Index array out of bounds”(数组索引越界)异常。
已确认迭代次数设置在要求的8到1之间,且AES加密使用的密钥为16字节。
代码片段
libInstance?.getCustomModules() ) desFireEv3.getReader().connect(); desFireEv3.getReader().timeout = 2000 val rawKey = ByteArray(16) { 0x00.toByte() } val keyData = KeyData() keyData.setKey(SecretKeySpec(rawKey, "AES")) desFireEv3.selectApplication(0) //desFireEv3.authenticate(0, IDESFireEV1.AuthType.Native, KeyType.THREEDES,keyData); desFireEv3.authenticate(0, IDESFireEV1.AuthType.Native, KeyType.THREEDES,keyData); desFireEv3.proximityCheckEV3(keyData, 8)
错误堆栈信息
0 = {StackTraceElement@30244} "com.nxp.nfclib.desfire.DESFireEV3.invalidPCResponse(:1300)" 1 = {StackTraceElement@30245} "com.nxp.nfclib.desfire.DESFireEV3.prepareProximityCheck(:1144)" 2 = {StackTraceElement@30246} "com.nxp.nfclib.desfire.DESFireEV3.proximityCheckEV3(:1134)"
解决思路
- 密钥类型与认证参数不匹配:你在
keyData中设置的是AES密钥,但认证时指定了KeyType.THREEDES。SDK内部会根据指定的密钥类型解析密钥数据,3DES和AES的密钥处理逻辑、长度要求存在差异(3DES密钥为16/24字节,AES为16/24/32字节),这种不匹配会直接导致数组索引越界。修改认证代码,将KeyType.THREEDES改为KeyType.AES,保持密钥类型一致。 - 确认卡片密钥配置:EV3卡的近距检测功能要求使用AES-128密钥,需确保卡片上目标应用的密钥0确实配置为AES类型,而非3DES。如果卡片密钥是3DES,需生成对应长度的3DES密钥(16字节)替换当前的AES密钥,并保持认证和近距检测的密钥类型统一为
KeyType.THREEDES。 - 验证应用选择操作:
selectApplication(0)选择的是默认应用,需确认该应用存在且你拥有执行近距检测的权限。可以添加返回值判断,例如:val selectResult = desFireEv3.selectApplication(0) if (selectResult != IDESFireEV1.Status.SUCCESS) { // 处理应用选择失败的情况 } - 检查密钥完整性:确保
keyData在认证和近距检测调用之间没有被修改,传递的是同一个有效的密钥对象。
内容的提问来源于stack exchange,提问作者amjadmak
相关产品推荐
相关产品推荐

