2011-07-04 16 views
21

Używam czytnika/programu piszącego acr38f, a moją kartą inteligentną jest SLE4418. Jak czytać i pisać tekst na mojej karcie inteligentnej?Jak napisać kartę inteligentną za pomocą pyscard

Na przykład: Hello World!

APDU = [0xFF, 0X20,0x00,0x00,0x02, 0x00, 0x00]

reakcji, SW1, SW2 = cardservice.connection.transmit (APDU)

apdu = [0XFF,0xA4,0x00,0x00,0x01,0x05] 
response, sw1, sw2 = cardservice.connection.transmit(apdu) 




apdu = [0XFF,0XB2,0X00,0xA7,0X09] 
response, sw1, sw2 = cardservice.connection.transmit(apdu) 
print response 


apdu = [0XFF, 0XD0,0x00,0xA7,0x09,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7,0x02,0xA7] 
response, sw1, sw2 = cardservice.connection.transmit(apdu) 

odpowiedź kartka:

connecting to ACS CCID USB Reader 0 
ATR 3B 04 92 23 10 91 
> FF 20 00 00 02 00 00 
< 00 00 00 90 0 
> FF A4 00 00 01 05 
< [] 90 0 
> FF B2 00 A7 09 
< FF FF FF FF FF FF FF FF FF 90 0 
[255, 255, 255, 255, 255, 255, 255, 255, 255] 
> FF D0 00 A7 09 A7 02 A7 02 A7 02 A7 02 A7 
< [] 90 0 
+1

Nie jest to ostateczna odpowiedź, ale można spróbować grok czytelnika [Manual] (http://www.smartcardreader.ru /upload/catalog/items/docs/doc5155.pdf), a następnie użyj [PyUSB] (http://sourceforge.net/apps/trac/pyusb/) do pracy z nim ... – Pill

+0

Czy chcesz czytać/pisać tekst do pamięci inteligentnej karty? Co masz na myśli pod "czytać i pisać moją kartę inteligentną do tekstu"? – Sasha

+0

@Aasha tak, chcę napisać pamięć. @pill nie wiem jak używać pyusb ... –

Odpowiedz

12

nie mam sprzętu do sprawdzenia tego, ale to powinno być ci:

Komunikacja z kartami inteligentnymi polega na wysyłaniu APDU (jednostka danych protokołu aplikacji karty inteligentnej) poleceń i odbieranie odpowiedzi APDU.

poleceń APDUs są wysyłane za pośrednictwem czytnika/write (Twój ACR38F) i składa się z 4-bajtowy nagłówek, a następnie dane (i informacją na temat rozmiaru danych i rozmiaru Response)

Field Len Description 
-------------------------------------------- 
CLA  (1) Instruction Class 
INS  (1) Instruction Code 
P1-P2 (2) Instruction Parameters 
Lc (0,1,3) Number of data bytes to follow 
DATA (*) Data to be transmitted 
Le (0-3) Maximum response bytes 

Odpowiedź składa się z :

Field Len Description 
-------------------------------------------- 
DATA (*) Data to be transmitted 
SW1-SW2 (2) Command status 

W przypadku SLE4418, in order to write data, wartości powinny być następujące:

  • CLA = 00
  • INS = D6
  • P1 = MSB adresu pamięci offsetowego do przechowywania bajtów
  • P2 = LSB adres pamięci przesunięcie do przechowywania bajtów
  • Lc = długość bajtów do przechowywania
  • DANYCH = dane przechowywać
  • Le = (pusty)

Tak więc w kodzie:

WRITE = [0x00, 0xD6] 
STARTMSB = [0x00] #change to where on the card you would like to write 
STARTLSB = [0x00] #same here 
MEM_L = [0x01] 
DATA = [0x01] 

cardservice.connection.connect() 
apdu = READ + STARTMSB + STARTLSB + MEM_L + DATA 
response1, sw1, sw2 = self.cardservice.connection.transmit(apdu) 

Inne istotne informacje:

Powiązane problemy