Forum: Mikrocontroller und Digitale Elektronik IBAN von Geldkarte lesen


von Andreas K. (andreas_k47)


Lesenswert?

Hallo liebe Gemeinde,
ich habe ein kleines Problem. Meine Aufgabe ist es, von EC-Karten die 
IBAN Nummer auszulesen. Ich habe mir hierzu in JAVA auch ein Programm 
geschrieben, welches die Verbindung zur Karte herstellt. Dies 
funktioniert alles wunderbar.
Leider habe ich das Problem, dass egal welches commadAPDU ich zur Karte 
schicke, die Karte immer mit Fehlern antwortet.
Z.B der Befehl get Data:

byte[] cmdApduGetCardUid = new byte[]{(byte)0x80, (byte)0xCA, 
(byte)0x9F13, (byte)0x9F36 , (byte)0,(byte)0 , (byte)0x00};
ResponseAPDU respApdu = channel.transmit(new 
CommandAPDU(cmdApduGetCardUid));

liefert mir immer folgende Antwort:

ResponseAPDU: 2 bytes, SW=6a86

Ich hoffe es kann mir jemand weiterhelfen, da ich langsam durchdrehe und 
am Verzweifeln bin :-(

von Stefan D. (reverse)


Lesenswert?

in einer der letzten " Datenschleuder" vom CCC oder im " Embedded 
Journal " hat jemand auch Geldkarten oder so ausgelesen, vielleicht 
findest du dort was
edit: war
http://journal.embedded-projects.net/index.php?module=archiv&action=list
die Nr 15

von Nosnibor (Gast)


Lesenswert?

Ohne jetzt die Doku parat (oder noch im Kopf) zu haben, und insbesondere 
ohne Java-Kenntnisse:

Bist Du Dir sicher, daß
(byte)0x9F36
genau das macht, was Du willst?

von Andreas K. (andreas_k47)


Lesenswert?

Hallo,

erst mal Danke für eure Antworten.

Also ich habe es mit (byte)0x9F36 versucht, weil ich es so ein einer 
Doku gelesen hab. Hab es aber auch mit 0x00 in beiden Parametern 
versucht.

Eigentlich sollte es ja so sein: 0x00, 0xCA, 0x00, 0x00 hierbei bekomme 
ich leider auch die selbe Fehlermeldung...
Sehr schöner Hinweis mit dem Heft :D

von Nosnibor (Gast)


Lesenswert?

OK, dann mal konkreter: soll "(byte)0x9F36" jetzt ein Byte oder zwei 
Bytes in die PDU einfügen?

Und überhaupt würde ich als Chipkarte gemäß ISO7816 nach "80 CA" (GET 
DATA) nur noch drei Bytes erwarten, nämlich die beiden Bytes, die mir 
sagen, welches Datenobjekt genau gefragt ist ("9F 13" und "9F 36" sehen 
vernünftig aus), und dann noch eines, das die maximale Länge der Antwort 
festlegt (0 steht für 256).

Aber das ist alles kontextabhängig, d.h. vorher muß man noch irgendeinen 
Affentanz aus "select file" und "select application" gemacht haben. Die 
Leute bei https://code.google.com/p/javaemvreader/ sind damit schon 
ziemlich weit.

von Andreas K. (andreas_k47)


Lesenswert?

Hallo,

sorry für die späte Rückmeldung.
Ich habe es jetzt geschafft, die gewünschten Daten auszulesen, jetzt 
muss ich nur noch rausfinden wie ich die erhaltenen Bytes verwenden 
kann...

von D. I. (Gast)


Lesenswert?

Andreas K. schrieb:
> Ich habe es jetzt geschafft, die gewünschten Daten auszulesen,

Damit der Thread seinen Sinn hat, poste doch die Lösung dazu. Nichts ist 
nerviger als:

1... Habe Problem
.
.
.
2... Habs gelöst, danke ciao.

von mex (Gast)


Lesenswert?

^^

von Andreas K. (andreas_k47)


Lesenswert?

AAAAALSO:

Die Bytes übergebe ich so:
byte[] commandBytes = new byte[]{0x00, (byte)0xa4, 0x04, 0x00, 0x07, 
(byte)0xa0, 0x00, 0x00, 0x00,0x04, 0x30, 0x60, 0x00};

Sorry, war so happy :D

aber jetzt weiß ich nur dass es ne MAESTRO Karte ist, jedoch ist die 
IBAN nicht ersichtlich :(

von Andreas K. (andreas_k47)


Lesenswert?

Update:
es sieht so aus als ob es Karten gibt, bei denen ich mit meinem Befehl 
die IBAN heraus bekomme (sparkasse). Leider geht das nicht bei jeder 
Karte (dem Rest :-( so wie es aussieht)...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nosnibor schrieb:
> OK, dann mal konkreter: soll "(byte)0x9F36" jetzt ein Byte oder zwei
> Bytes in die PDU einfügen

So wird nur ein Byte eingefügt, wenn man castet sollte man schon wissen 
was man tut!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.