2016-03-30 18 views
-1

Ich habe SPR332 Pinpad Reader und ich muss Programm auf Java schreiben, die Pin von Bankkarten verifizieren.Verify Pin mit Java Returns 6a86

Das ist also mein PINverifyStructure:

bTimeOut = 0х00 
bTimeOut2 = 0х00 
bmFormatString = 0x82 
bmPINBlockString = 0x47 
bmPINLengthFormat = 0x04 
wPINMaxExtraDigitMax = 0x0c 
wPINMaxExtraDigitMin = 0x00 
bEntryValidationCondition = 0x02 
bNumberMessage = 0x01 
wLangId = 0x09 0x04 
bMsgIndex = 0x00 
bTeoPrologue = 0x00 0x00 0x00 
ulDataLength = apduLength 0x00 0x00 0x00 

Überprüfen APDU-Befehl ist:

CLA = 0x00 
INS = 0x20 
P1 = 0x00 
P2 = 0x00 
LC = 0x08 
0x20 
0xff 
0xff 
0xff 
0xff 
0xff 
0xff 
0xff 

Danach i Stift auf pinpad eingeben, dann erhalten i APDU Antwort 6A86. In der APDU-Antwortspezifikation bedeutet dies "Falscher P1- oder P2-Parameter".

Bitte, Hilfe, was ist falsch mit meinem Befehl?

Ich änderte P2 auf 0x01, Antwort die gleiche 6A86

+0

1) Holen Sie sich die Verify-Befehl im direkten Modus arbeiten. 2) Lesen Sie das Handbuch des Lesers sorgfältig, wie Sie diese APDU umhüllen, damit der Leser die eingegebene PIN eingeben kann. (Dies kann ein VERIFY-Befehl sein, könnte aber etwas völlig anderes sein). 3) Versuchen Sie dann, eine APDU-Modifikation durch den Leser zu erreichen. – guidot

+0

1) Direkter Modus gibt die gleiche Antwort ** 6a81 ** 2) Ich habe kein Handbuch von Identive SPR332 Pinpad und Google-Suche war nicht erfolgreich –

Antwort

0

Ich habe endlich gefunden, warum die Antwort 6a81 war.

Es war, weil ich EMV-Karte habe, so sollte VERIFY-Befehl in einer bestimmten Reihenfolge aufgerufen werden (nach SELECT FILE, OPTIONEN BEARBEITEN, RECORD LESEN, DATEN ERHALTEN).

Jetzt habe ich 9000. Thx alle

0

Siehe ist EMV Book 3, 6.5.12 Befehl-Antwort-APDUs VERIFY. PlaintextPin oder 0x88 - - EncipheredPin

P2 sollte 0x80 sein. In deinem Fall - 0x80.

+0

Ich habe es auf 0x80 geändert, dann erhielt ich Code 6a81, das bedeutet "Funktion nicht unterstützt. " Bedeutet das, dass mein Kartenleser keine Verifikationsfunktion hat? –

+0

Command plaintext Überprüfen Sie, ob die Meldung wie folgt lautet: 00 20 00 80 08 24 12 34 FF FF FF FF FF. Bitte überprüfen Sie das Feld N PIN-Länge. 6A81 bedeutet, dass die Karte zuvor blockiert wurde. Könnten Sie bitte die volle Befehlsfolge mit der Antwort angeben? –

+0

VERIFY_PIN_START [00: 00: 82: 47: 04: 0: 00: 02: 01: 09: 04: 00: 00: 00: 00: 0: 00: 00: 00: 00: 20: 00: 80: 08: 20: ff: ff: ff: ff: ff: ff: ff] \t GET_KEY_PRESSED: 0x2B (Benutzer eingegebenen gültigen Schlüssel 0-9) \t GET_KEY_PRESSED: 0x2B \t \t (Benutzer gültige Taste 0-9 eingegeben) GET_KEY_PRESSED: 0x2b (Benutzer eingegebenen gültigen Schlüssel 0-9) \t \t GET_KEY_PRESSED: 0x2b (Benutzer eingegebenen gültigen Schlüssel 0-9) \t \t GET_KEY_PRESSED: 0x0d (Benutzer bestätigt) \t \t VERIFY_PIN_FINISH \t \t Antwort [6a: 81] –