Taplinx:InvalidResponseLengthException:desfire EV1卡上的readData

时间:2018-11-22 10:00:27

标签: mifare

从DESFire EVO1卡读取数据(AES加密)时,我收到InvalidResponseLengthException。我正在使用1.5版的taplinx库

我的代码如下:

private void cardLogic(final Intent intent){

    CardType cardType = m_libInstance.getCardType(intent);

    Log.v(logTag, cardType.getTagName());

    IDESFireEV1 objDESFireEV1 = DESFireFactory.getInstance().getDESFire(m_libInstance.getCustomModules());



    Key key = new SecretKeySpec(AUTHENTICATION_KEY, "AES");

    KeyData kd = new KeyData();

    kd.setKey(key);

    try {

        objDESFireEV1.getReader().connect();

        objDESFireEV1.getReader().setTimeout(2000);

        objDESFireEV1.selectApplication(APP_ID);

        Log.v(logTag, objDESFireEV1.getAuthStatus());

        objDESFireEV1.authenticate(1, IDESFireEV1.AuthType.AES,KeyType.AES128 , kd);

        Log.v(logTag, objDESFireEV1.getAuthStatus());

        byte[] data = objDESFireEV1.readData(1, 0, 3);

        Log.v(logTag, data.toString());

    } catch(Throwable t) {

        Log.e(logTag, t.getMessage(), t);

    }

}

LogCat

2018-11-22 10:19:13.874 20228-20228/eu.mobitrace.mifaredesfiretest2 E/app-logger: on New intent
2018-11-22 10:19:13.977 20228-20228/eu.mobitrace.mifaredesfiretest2 V/app-logger: DESFire EV1
2018-11-22 10:19:13.993 20228-20228/eu.mobitrace.mifaredesfiretest2 V/app-logger: Not Authenticated
2018-11-22 10:19:14.035 20228-20228/eu.mobitrace.mifaredesfiretest2 V/app-logger: AES
2018-11-22 10:19:14.045 20228-20228/eu.mobitrace.mifaredesfiretest2 E/app-logger: Authentication Error

com.nxp.nfclib.exceptions.InvalidResponseLengthException: Authentication Error

    at com.nxp.nfclib.desfire.ʻ.ˋ(:4559)

    at com.nxp.nfclib.desfire.ʻ.ˋ(:4600)

    at com.nxp.nfclib.desfire.ʿ.ˊ(:182)

    at com.nxp.nfclib.desfire.ʻ.getFileSettings(:2043)

    at com.nxp.nfclib.desfire.ʻ.ˏ(:2494)

    at com.nxp.nfclib.desfire.ʻ.readData(:2531)

    at eu.mobitrace.mifaredesfiretest2.MainActivity.cardLogic(MainActivity.java:101)

我从卡制造商处获得的信息:

  • 应用程序ID:当我输入其他ID时,这看起来可以正常工作
  • 身份验证密钥:看起来也可以正常工作,使用此密钥时不会引发异常。当我使用另一个(零或倒数)时,会在此处抛出异常
  • 此密钥的密钥权限:read(1)
  • 文件ID:1
  • 读取偏移量:0个字节
  • 读取长度:3个字节

我尝试过的事情:

  • 使用ISO命令集:这完全是失败的
  • 在read命令中处理整数,以检查创建此整数时是否出错(从0/1开始计数)

问题 这是怎么了?是某种身份验证问题,还是我使用lib错误?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。

byte [] data = objDESFireEV1.readData(1、0、3);

更改为:

byte [] data = objDESFireEV1.readData(1、0、3,IDESFireEV1.CommunicationType.Plain,3);

可以吗?