Передача Android NFC (NFC-A) приводит к недопустимой команде 911C (1C) на некоторых устройствах - PullRequest
0 голосов
/ 15 марта 2019

В моем приложении я использую nfc для связи с картой MIFARE DESfire EV1. В определенный момент некоторые устройства получают 911C недопустимый командный ответ от карты.

    byte[] byteCommands = StringUtils.hexStringToByteArray(command);
    byte[] byteResults = isodep.transceive(byteCommands);
    String hexResult = StringUtils.byteArrayToHexString(byteResults);

вот как я посылаю команды, а вот преобразователи байтов / шестнадцатеричных кодов:

    public static byte[] hexStringToByteArray(String s) {

    int len = s.length();
    byte[] data = new byte[len/2];

    for(int i = 0; i < len; i+=2){
        data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
    }

    return data;
}

final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public static String byteArrayToHexString(byte[] bytes) {
    char[] hexChars = new char[bytes.length*2];
    int v;

    for(int j=0; j < bytes.length; j++) {
        v = bytes[j] & 0xFF;
        hexChars[j*2] = hexArray[v>>>4];
        hexChars[j*2 + 1] = hexArray[v & 0x0F];
    }

    return new String(hexChars);
}

Кстати, я обнаружил, что устройство, которое получает ответ 911C, не поддерживает APDU расширенной длины. Но поскольку у меня нет такого большого количества устройств, я не могу подтвердить, что 911C и поддержка APDU расширенной длины связаны между собой.

Команда, которая приводит к 911C:

90AF0000101BDD04D361D5DE378E15CDC31883BE1400

Как я могу решить эту проблему, если она связана с поддержкой APDU расширенной длины.

Примечание: я видел людей, использующих FFCA000000 для получения UID карты, но это также возвращает 1С.

...