JavaCard - AID не сохраняется? массив переписывается последним элементом

76
4

Я сталкиваюсь с проблемой при создании файла каталога. Я, очевидно, не создаю новый объект, но только ссылку - просто еще не уверен, где/почему!

DirectoryFile[] arrayDF = new DirectoryFile[8];

теперь, когда я создаю новый DF:

numapp++;
arrayDF[numApp] = new DirectoryFile(aid);

и сразу после этого я просто распечатываю их в цикле

APDU apdu = APDU.getCurrentAPDU();
apdu.setOutgoing();
apdu.setOutgoingLength((short) 21);

for (i = 2; i <= numApp; i++) {
apdu.sendBytesLong(arrayDF[i].getAID(), (short) 0, (short) 6);

}

где numApp - количество приложений /DF, начиная с 2, так как 1 является MasterFile. for aid = a00000000001 Я получаю

A0 00 00 00 00 01 90 00                         .........
Status: No Error

в качестве ответа на помощь = a00000000002 Я получаю

A0 00 00 00 00 02 A0 00 00 00 00 02 90 00    ................
Status: No Error

for aid = a00000000003 Я получаю

A0 00 00 00 00 03 A0 00 00 00 00 03 A0 00 00 00 00 03 90 00    ................
Status: No Error

Таким образом, все уже сохраненные AID как-то перезаписываются. В DirectoryFile я делаю следующее

public DirectoryFile(byte[] aid) {
super(aid);
for (byte i = 0; i < activatedFiles.length; i++)
activatedFiles[i] = false;

}

где super (help) вызывает конструктор File.java

     public abstract class File {
public byte[] aid = new byte[6];

public File (byte[] aid) {
this.aid = aid;
}
public byte[] getAID() {
return aid;
}
}

Где моя ошибка в этом?

После немного большего количества тестов я, по крайней мере, узнал, что классы (DirectoryFile, File) должны работать нормально:

 aDF[j] = new DirectoryFile(aid1);
j++;
aDF[j] = new DirectoryFile(aid2);
j++;
aDF[j] = new DirectoryFile(aid3);
j++;
aDF[j] = new DirectoryFile(aid4);
j++;
APDU apdu = APDU.getCurrentAPDU();
apdu.setOutgoing();
byte[] myi = new byte[1];
apdu.setOutgoingLength((short) 28);
for (j = 0; i < 4; i++) {
myi[0] = i;
apdu.sendBytesLong(myi, (short) 0, (short) 1);
apdu.sendBytesLong(aDF[i].getAID(), (short) 0, (short) 6);

распечатает

00 A0 00 00 00 00 01 01 A0 00 00 00 00 02 02 A0    ................
00 00 00 00 03 03 A0 00 00 00 00 04 90 00 ..............
Status: No Error

спросил(а) 2013-09-26T18:15:00+04:00 6 лет, 9 месяцев назад
1
Решение
66

Ваш File реализация не является правильной, вы сначала создать массив из шести байт, но вместо того, чтобы копировать AID в него - с помощью Util.arrayCopy() - вы просто присвоить ему ссылку на переданном в массиве, бросая таким образом, ссылку на ранее созданный буфер aid. Поэтому, если значения переданного в AID значения изменяются, значение AID в File также изменяется.

ответил(а) 2013-09-28T16:06:00+04:00 6 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема