2011-07-04 75 views
21

我正在使用讀寫器acr38f,而我的智能卡是SLE4418。如何讀寫我的智能卡上的文字?如何使用pyscard寫智能卡

例如:Hello World!

APDU = [0XFF,0X20,0x00,0x00,0x02,0x00時,0×00]

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

卡響應:

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

這不是一個最終的答案,但你可以嘗試神交讀者的[手動](http://www.smartcardreader.ru /upload/catalog/items/docs/doc5155.pdf),然後使用[PyUSB](http://sourceforge.net/apps/trac/pyusb/)來處理它... – Pill

+0

你想讀/寫一個文本到你的智能卡內存? 「讀寫我的智能卡到文本」下的含義是什麼? – Sasha

+0

@sasha是的,我想寫一個內存。 @pill我不知道如何使用pyusb ... –

回答

12

我沒有測試這個硬件,但是這應該讓你去:

與智能卡進行通信包括髮送APDU (智能卡應用協議數據單元)指令和接收APDU響應。

命令的APDU通過讀取器/寫入(您的ACR38F)發送,並且由一個4字節的標題,隨後的數據(和信息有關數據大小和響應大小)

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 

響應包括的:

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

SLE4418, in order to write data,的值的情況下,應該如下:

  • CLA = 00
  • INS = D6
  • P1 =存儲器地址偏移來存儲字節的MSB
  • P2 = LSB的存儲器地址偏移來存儲字節
  • LC =字節的長度來存儲
  • DATA =數據存儲
  • 勒=(空)

因此,因此在代碼:

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) 

其他相關信息: