2017-01-05 1 views
1

저는 pcsc-sharp 라이브러리를 사용하여 ACR122U Reader와 통신하여 Mifare Classic 1k 카드에 대한 정보 읽기/쓰기를 수행합니다.pcsc-sharp Mifare 인증

라이브러리 및 APDU 개념에 익숙해지면 내 응용 프로그램에서 카드 UID를 식별자로 사용할 수 있습니다. 이제 카드에 내 ID를 설정해야합니다. 따라서 NXP의 MIFARE (http://cache.nxp.com/documents/data_sheet/MF1S70YYX_V1.pdf?pspll=1)와 관련된 설명서를 읽었으며 ISO 7816-4 (http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_6_basic_interindustry_commands.aspx)에 대한 정보도 얻었습니다. 읽기/쓰기 작업을 수행하기 위해 카드 메모리에 액세스하기 전에 인증을해야한다는 것을 알고 있으며 표준 키 값을 알고 있습니다.

GitHub에서 pcsc-sharp 예제를 다운로드하고 Mifare1kTest 예제를 실행했습니다. 내가 일하지만 라인 36에 card.LoadKey 실패합니다. LoadKey에있는 Apdu 명령의 응답 값은 SW1 = 99 SW2 = 0이며 어떤 문서에서도 찾을 수 없습니다. "throw new Exception"섹션을 주석 처리하면 예제가 작동합니다.

내 질문은 이제 올바른 값이 Card.LoadKey으로 전달되는데, Apdu 명령의 매개 변수에 사용할 올바른 값입니다. "keynumber"(섹트로 넘버 - 섹터/블록 조합)이란 무엇입니까? 예제가 작동하면 LoadKey 호출이 필요합니까?

어떤 도움

안부

을 apreciated입니다

마티아스

+0

일반적으로 9xxx 범위의 내용은 성공을 의미하며 xxx는 추가 정보입니다. 내가 올바르게 기억하면 APDU 랩은 MiFare 응답을 상태 어로 집어 넣을 것입니다. (하지만 언젠가는 인터페이스를 프로그래밍했습니다. 몇 년 전에 내 마음은 더 이상 젊지 않습니다.) 키를 사용하여 키로드에 성공 했습니까? –

+0

키는 판독기 메모리의 ** 휘발성 ** 부분에로드해야합니다. 이 예제는 'KeyStructure, NonVolalatileMemory'를 처리합니다. ** 아래의 해답에서 Mr Heart **가 설명 된대로 작동합니다. SW1/SW2의 결과는 90 00입니다. 대단히 감사합니다. –

답변

1

귀하의 질문은 광범위하지만,이 당신을 위해 작동합니다. 코드는 설명과 함께 설명됩니다.

   var loadKeySuccessful = card.LoadKey(
        KeyStructure.VolatileMemory, 
        0x00, // first key slot 
        new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} // key 
        ); 
+0

답장을 보내 주셔서 감사합니다. 당신 말이 맞아요. ** 휘발성 메모리에 키를로드 ** 문제가 해결되었습니다. 또한 ACR122U 응용 프로그래밍 설명서에도 설명되어 있지만 어쨌든 놓쳤습니다. –

+0

@Matthias 그게 올바른 답변이라면 다른 사람들이 솔루션을 찾는 데 도움이됩니다. –