Dodatkowe wskazówki do ćwiczenia z czytnikiem kart
Transkrypt
Dodatkowe wskazówki do ćwiczenia z czytnikiem kart
Dodatkowe wskazówki do ćwiczenia z czytnikiem kart mikroprocesorowych dla studentów studiów zaocznych UWAGA Poniższe wskazówki zakładają znajomość architektury PC/SC oraz struktury komend APDU Obsługa czytnika w systemie Windows Do korzystania z czytnika w systemie Windows można wykorzystać bibliotekę Winscard dostarczaną przez system operacyjny realizującą komunikację z czytnikiem wg architektury PC/SC. Za pomocą funkcji z tej biblioteki można odczytywać dane z karty. Bibliotekę Winscard musimy jawnie dołączyć do projektu albo poprzez właściwości projektu (Project->properties->Configuration properties->Linker->Input->Additional dependencies) albo za pomocą instrukcji preprocesora (#pragma comment(lib,"winscard.h"). Oczywiści w kodzie źródłowym należy dołączyć plik z definicjami (#include<winscard.h>) Proces komunikacji może wyglądać następująco: 1. Nawiązanie komunikacji z lokalnym zarządcą zasobów (SCardEstablishContext) 2. Wylistowanie dostępnych czytników (SCardListReaders) 3. Połączenie się z wybranym czytnikiem (SCardConnect) 4. Wysyłanie komend i odczyt danych z karty (SCardTransmit) 5. Rozłączenie się z czytnikiem (SCardDisconnect) 6. Rozłączenie się z zarządcą zasobów(SCardReleaseContext) Odczyt danych z karty SIM GSM'a (lista kontaktów) 1.Wybrać katalog DF Telecom (FID = 0x7F10) 2.Wybrać plik EF ADN (FID = 0x6F3A) - zapamiętać wartość SW2 odpowiedzi 3.Pobrać dalszą część odpowiedzi za pomocą komendy GET_RESPONSE (ins=0xC0), w której należy ustawić długość odpowiedzi (P3) na podstawie SW2 z poprzedniego punktu 4.Za pomocą komendy READ_RECORD (ins=0xB2) odczytać rekord w ten sposób w parametrach komendy należy ustawić nr rekordu (w P1 – liczony od 1) oraz długość odpowiedzi (w Le), która jest podana na bajcie o indeksie 14 (licząc od zera) odpowiedzi poprzedniej komendy(GET_RESPONSE) 5.Uzyskany pojedynczy rekord książki telefonicznej jako ciąg bajtów ma strukturę przedstawioną niżej ------- struktura rekordu książki telefonicznej-----nazwa FF FF FF dl typ n1 n2 n3....FF FF nazwa - kolejne kody ascii nazwy użytkownika dl - ilość bajtów opisujących numer tel. (łącznie z typem) typ - 81 lub 91 n1,n2,... - bajty nr telefonu. Nr telefonu kodowany jest następująco (pojedynczy bajt): pojedynczy bajt składa się z dwóch liczb w kodzie bcd - należy je zamienić miejscami np. 0x81 dla nr 18 UWAGA Zamiana miejsc dla nr telefonu wynika z literatury,ale np. program smardcard tego nie robi. Użyteczne linki http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_5_basic_organizations.aspx http://www.ttfn.net/techno/smartcards/iso7816_4.html#ss1 http://solutions-point.co.uk/tag/apdu-commands http://www.springcard.com/solutions/pcsc.html