2015-04-09 10 views
-1

У меня есть небольшая проблема с моим апплетом. Он работает нормально, как и должно быть, на некоторых моих Java-картах, но на некоторых других картах он работает отрывочно! Он написан таким образом, чтобы посылать обратно массив, но он отправляет обратно только первый байт. Я пробовал разные способы, но он всегда отправляет только этот первый байт. Это карточная ошибка или что-то с моим приложением? Вот пример функции. Эта функция отлично работает и отправляет весь массив только в половине моих карт, а не во всех из них!javacard отправляет только один/первый массив формы байта

public void testA(APDU apdu) 
{ 
    Util.arrayCopyNonAtomic(keyParameters.getA(), (short) 0, apdu.getBuffer(), (short) 0, (short) keyParameters.getA().length); 
    apdu.setOutgoingAndSend((short) 0, (short)keyParameters.getA().length); 
} 

PS. Я использую 2 типа карт Gemalto, один из которых, вероятно, имеет NFC.

+2

Я не думаю, что у нас есть достаточно информации, чтобы ответить на это. Пожалуйста, показывайте больше кода и точный результат как трассировка APDU. Пожалуйста, перечитайте вопрос (особенно название) перед публикацией. –

+0

Я думаю, что в других частях вашей программы вы использовали специальный метод API, который поддерживает некоторые из ваших карт, а некоторые другие нет. И то, что вы получаете в плохих ситуациях, это не первый байт вашего массива, это слово состояния, которое показывает ошибку! Это просто догадка! – Abraham

ответ

0

Ниже приведены решения, с наиболее возможным минимально возможным:

  1. , так как вы не придала полные исходные коды, я мог подозревать, что «(короткий) keyParameters.getA() длина. "на самом деле 1.

  2. , если вы уверены, что о значении ... Гета() длины, вы можете попробовать изменить свои коды:.

    Util.arrayCopyNonAtomic(keyParameters.getA(), (short) 0, apdu.getBuffer(), ISO7816.OFFSET_CDATA, (short) keyParameters.getA().length); 
    apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, (short)keyParameters.getA().length); 
    

см., Обычно заголовок APDU (первые 5 байтов буфера апду) не разрешается изменять на некоторых java-картах. Таким образом, это безопасная игра для хранения данных, отправляемых с CDATA (offset = 5) буфера APDU. он должен работать нормально.