2017-01-05 6 views
1

Ich benutze die Pcsc-Sharp-Bibliothek, um mit einem ACR122U Reader eine Lese-/Schreib-Informationen zu Mifare Classic 1k Karten zu kommunizieren.pcsc-sharp Mifare Authentifizierung

Nachdem ich mich mit der Bibliothek und dem APDU-Konzept vertraut gemacht habe, kann ich die Karten-UID als Kennung in meinen Anwendungen verwenden. Jetzt muss ich meine eigenen IDs auf die Karte setzen. Daher habe ich einige Handbücher zu MIFARE von NXP gelesen (wie http://cache.nxp.com/documents/data_sheet/MF1S70YYX_V1.pdf?pspll=1) und auch einige Informationen über ISO 7816-4 (http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_6_basic_interindustry_commands.aspx). Ich bin mir der Notwendigkeit bewusst, die Authentifizierung durchzuführen, bevor ich auf den Kartenspeicher zugreife, um Lese-/Schreiboperationen durchzuführen, und ich kenne den Standardschlüsselwert.

Ich habe die Pcsc-Sharp-Beispiele von GitHub heruntergeladen und das Mifare1kTest-Beispiel ausgeführt. Ich arbeite aber card.LoadKey in Zeile 36 schlägt fehl. Die Antwortwerte des Apdu-Befehls in LoadKey ist SW1 = 99 SW2 = 0, die ich in keiner Dokumentation finden kann. Durch das Auskommentieren des Abschnitts "Neue Exception werfen" funktioniert das Beispiel.

Meine Frage ist jetzt, welche Werte die richtigen sind, die an Card.LoadKey übergeben werden, welche die richtigen Werte sind, die für Parameter in dem Apdu Command verwandt werden. Was ist mit "Schlüsselnummer" (Sektornummer - Sektor/Block Kombination) gemeint? Ist der LoadKey Aufruf notwendig, wenn das Beispiel funktioniert ...?

Jede Hilfe apreciated ist

Mit freundlichen Grüßen

Matthias

+0

Normalerweise bedeutet alles in der 9xxx-Reihe Erfolg, wobei xxx zusätzliche Information ist. Wenn ich mich richtig erinnere, wird die MiFare-Antwort durch den APDU-Wrap innerhalb des Statuswortes gesetzt (aber hey, ich habe die Schnittstelle an einem Tag programmiert, vor einem Jahr, meine Gedanken sind nicht mehr so ​​jung). Haben Sie versucht, ob der Schlüssel erfolgreich mit dem Schlüssel geladen wurde? –

+0

Der Schlüssel muss in den ** volatilen ** Teil des Leserspeichers geladen werden. Das Beispiel übergibt 'KeyStructure, NonVolalatileMemory'. Tun Sie dies wie beschrieben ** Herr Heart ** in der Antwort unter dem Beispiel funktioniert. Die Ergebnisse für SW1/SW2 sind 90 00. Vielen Dank. –

Antwort

1

Ihre Frage ist breit, aber diese sollten für Sie arbeiten. Der Code wird mit Kommentaren erklärt

   var loadKeySuccessful = card.LoadKey(
        KeyStructure.VolatileMemory, 
        0x00, // first key slot 
        new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} // key 
        ); 
+0

Danke für Ihre Antwort. Du hast recht. das Laden des Schlüssels in ** flüchtigen Speicher ** löste das Problem. Es ist auch im ACR122U Application Programming Manual beschrieben, aber irgendwie habe ich es verpasst. –

+0

@MatthiasFuchs Wenn das die richtige Antwort ist, markieren Sie sie als richtig, um anderen Menschen bei der Suche nach Lösungen zu helfen. –

Verwandte Themen