You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:17:28