2011-07-04 28 views
21

Estoy usando el lector/escritor acr38f y mi tarjeta inteligente es SLE4418. ¿Cómo leo y escribo texto en mi tarjeta inteligente?Cómo escribir una tarjeta inteligente con tarjeta de crédito

Por ejemplo: Hello World!

apdu = [0xFF, 0X20,0x00,0x00,0x02, 0x00, 0x00] respuesta

, 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) 

respuesta de la tarjeta:

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

No es una respuesta final, pero se puede tratar de asimilar [Manual] del lector (http://www.smartcardreader.ru /upload/catalog/items/docs/doc5155.pdf), luego use [PyUSB] (http://sourceforge.net/apps/trac/pyusb/) para trabajar con él ... – Pill

+0

¿Quiere leer/escribir? un texto a la memoria de su tarjeta inteligente? ¿A qué te refieres con "leer y escribir mi tarjeta inteligente en el texto"? – Sasha

+0

@sasha sí quiero escribir una memoria. @pill no sé cómo usar pyusb ... –

Respuesta

12

que no tienen el hardware para probar esto, pero esto debe conseguir que va:

La comunicación con tarjetas inteligentes consiste en enviar APDU (unidad de datos de protocolo de aplicación de tarjeta inteligente) comandos y recibir respuestas de APDU.

comando APDU se envían a través del lector/de escritura (su ACR38F) y consta de una cabecera de 4 bytes seguido de los datos (y la información sobre el tamaño de los datos y el tamaño de la respuesta)

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 

La respuesta consiste en :

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

En el caso de los SLE4418, in order to write data, los valores deben ser como sigue:

  • CLA = 00
  • INS = D6
  • P1 = MSB de la dirección de memoria de desplazamiento para almacenar bytes
  • P2 = LSB de la dirección de memoria compensado para almacenar bytes
  • Lc = longitud de bytes para almacenar
  • DATOS = datos para almacenar
  • Le = (vacío)

Así que, por tanto, en el código:

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) 

otra información relevante:

Cuestiones relacionadas