Почему проверка PIN-кода не удалась?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему проверка PIN-кода не удалась?

Сообщение Anonymous »

Привет, я работаю с Java-картой. В приведенном ниже коде я хочу настроить пин-код. Когда я выполняю команду apdu C0010200050430303030, чтобы установить пин-код, ответ равен 9000, что означает Успешно, но когда я выполните команду C00200000430303030, чтобы проверить вывод, я получил ответ 63C2, что означает Проверка не удалась, осталось 2 попытки. Пожалуйста, помогите мне исправить этот код, чтобы он не прошел проверку.
private void initialSetup(APDU apdu) {
if (isSetupDone) {
ISOException.throwIt(SW_SETUP_ALREADY_DONE);
}

byte[] buffer = apdu.getBuffer();
byte p1 = buffer[ISO7816.OFFSET_P1];
short offset = buffer[ISO7816.OFFSET_CDATA];
short bytesRemaining = apdu.setIncomingAndReceive();

short outBufferLen = 0;
byte[] outBuffer = new byte[outBufferLen];
short outBufferOffset = 0;
byte[] pinData = new byte[STANDARD_PIN_LEN + 1];
byte[] pukData = new byte[STANDARD_PUK_LEN + 1];

// Handling PIN
if ((p1 & 0x02) == 1) {

byte pinLength = buffer[offset++];
if (bytesRemaining < pinLength) {
ISOException.throwIt(SW_WRONG_LENGTH);
}
Util.arrayCopyNonAtomic(buffer, offset, pinData, (short) 0, pinLength);
pin.update(buffer, offset, pinLength);
offset += pinLength;
bytesRemaining -= pinLength;
} else {
pinData[0] = STANDARD_PIN_LEN;
random.nextBytes(pinData, (short) 1, STANDARD_PIN_LEN);
pin.update(pinData, (short) 1, STANDARD_PIN_LEN);
}

if (p1 == 0) {
outBufferLen = (short) (pinData.length);
outBuffer = new byte[outBufferLen];
short outOffset = 0;

Util.arrayCopyNonAtomic(pinData, (short) 0, outBuffer, outOffset, (short) pinData.length);
outOffset += pinData.length;
}

isSetupDone = true;

apdu.setOutgoing();
apdu.setOutgoingLength(outBufferLen);
apdu.sendBytesLong(outBuffer, (short) 0, outBufferLen);
}

private void VerifyPIN(APDU apdu, byte[] buffer) {
short bytesRemaining = apdu.setIncomingAndReceive();
if (bytesRemaining != STANDARD_PIN_LEN) {
ISOException.throwIt(SW_WRONG_LENGTH);
}

boolean isValid = pin.check(buffer, ISO7816.OFFSET_CDATA, STANDARD_PIN_LEN);
if (!isValid) {
if (pin.getTriesRemaining() == 0) {
ISOException.throwIt(SW_LOCKED_PIN);
} else {
short remainingTries = pin.getTriesRemaining();
ISOException.throwIt((short) (SW_PIN_FAILED | remainingTries));
}
}

apdu.setOutgoingAndSend((short) 0, (short) 0);
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... pin-failed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»