В моем приложении я использую 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С.