Вы должны убедиться, что ваша реализация Java Card и читатель поддерживают расширенную длину.Может быть, что реализации имеют барьеры, которые будут запрещать использование полноразмерной расширенной длины: реализации могут (неправильно) ограничивать размер APDU, например.
Читатель может потребовать, чтобы ATR указывалувеличенная длинаЧипы NFC печально известны тем, что не реализовали расширенную длину правильно (а Android печально известен тем, что не включили эту функциональность, если они это делают).Вероятно, это не ваша проблема, поскольку слово состояния, похоже, генерируется картой.
В коде Java Card есть ошибка, она всегда должна использовать setOutgoingLength()
.Кажется, ваш код уже вызывает исключение при вызове этого метода, поэтому я ожидаю, что размер, который вы пытаетесь отправить, не поддерживается платформой.Кроме того, ваш исходный код, использующий sendBytesLong
, также выглядит правильно.Конечно, ваш апплет должен реализовывать интерфейс тегов ExtendedLength
.
Обратите внимание, что 6F00
(ваш код состояния, всегда используйте шестнадцатеричные числа, а не десятичные дроби) может генерироваться любым необработанным исключением времени выполнения , созданным на карте.Поэтому убедитесь, что ваша проблема не создается в другом месте, когда вы пытаетесь ее исправить.
К сожалению, расширенная длина - минное поле.Сейчас 2018 год, и мир смарт-карт все еще не может отправлять 32 / 64Ki -1 байт или более.Думаю, пришло время заменить ISO / IEC 7816-4 чем-то, что имеет смысл.