2017-10-26 16 views
1

SAM 슬롯 (보안 액세스 모듈)이있는 acr1281 판독기가 있습니다. 파이썬 라이브러리 smartcard을 사용하여 pc/sc로 카드와 통신 할 수 있습니다. 그러나 독자에게 삽입 된 SAM에 명령을 보내려고합니다.pcsc 명령을 SAM에 보내고 판독기에 카드를 넣는 방법

어떻게 '명령 채널을 전환'할 수 있습니까? 스마트 카드 라이브러리는 리더 (PC_to_RDR_Escape)에게 제어 명령을 보낼 수 있지만 acr1281 설명서에는 GetFirmvareVersion 명령 만 지정되었습니다.

나는 심지어 SCardStatus()를 호출하고 SAM이 삽입 된 0x34 코드 (이것이 SCARD_POWERED=0x10 | SCARD_NEGOTIABLE=0x20 | SCARD_PRESENT=0x04임을 이해함)를 볼 수 있으며 SAM이 없으면 0x0c = SCARD_SWALLOWED=0x08 | SCARD_PRESENT=0x04입니다.

하지만 내가 보낸 모든 명령은 MIFARE PICC로 이동합니다. 독자에게 삽입 된 SAM에 명령을 보내려합니다.

우분투 리눅스에서

답변

1

PSC를 드라이버는 내가 smartcard 도서관에서 3 개 독자가 설치된 :

from smartcard.System import readers 
print(readers()) 
  • ACS ACR1281 1S 듀얼 리더 00 00
  • ACS ACR1281 1S 듀얼 리더 00 01
  • ACS ACR1281을 1S 듀얼 리더 00 02

리더 00 00은 (는) 비활성입니다. 이

그래서 내가 SAM에 명령을 보낼 카드 APDU와 독자 02를 보내 독자 01를 사용 독자 00 02은 ACR에서 SAM 슬롯입니다 독자 00 01은 PICC (내 경우에는 MIFARE)입니다, 연락처 카드를 그리고 내 작업을 성공적으로 해결했습니다.

자동으로 찾는 방법을 모르지만이 00 00 등은 이름에 상수라고 생각하며 이름에 마지막 기호로 PICC 및 SAM에 대한 독자를 선택할 수 있습니다.

나는 가까이에 카드를 기다리는 smartcard.CardRequest.CardRequest()에 의하여 PICC 독자에 연결한다. 그래서 SAM 리더 만 찾아 연결해야합니다.

sam_connection = readers()[2].createConnection() 
sam_connection.connect(mode=SCARD_SHARE_SHARED, 
         disposition=SCARD_LEAVE_CARD, 
         protocol=SCARD_PROTOCOL_ANY)