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 :-(
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
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?
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
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.
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...
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.
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 :(
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)...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.