2017-01-05 29 views
1

我正在使用pcsc-sharp庫與ACR122U讀卡器進行通信,向Mifare Classic 1k卡讀取/寫入信息。pcsc-sharp Mifare身份驗證

熟悉庫和APDU概念後,我可以在我的應用程序中使用卡片UID作爲標識符。 現在我需要將自己的ID設置到卡上。因此,我閱讀了一些關於恩智浦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)的一些信息。 我知道在訪問存儲卡執行讀/寫操作之前需要進行身份驗證,並且我知道標準Key值。

我從GitHub下載了pcsc-sharp示例,並運行了Mifare1kTest示例。我工作但第36行中的card.LoadKey失敗。 LoadKey中的Apdu命令的響應值爲SW1 = 99 SW2 = 0,這在任何文檔中都找不到。註釋掉「拋出新的異常」部分使得該示例正常工作。

我現在的問題是,哪些值分別傳遞到Card.LoadKey,這些值是Apdu命令中用於參數的正確值。 「keynumber」(Sectornumber - Sector/Block Combination)是什麼意思?如果示例有效...... LoadKey調用是必要的嗎?

任何幫助apreciated

問候

馬蒂亞斯

+0

通常任何在9xxx範圍意味着成功,xxx是額外的信息。如果我沒記錯的話,APDU包裝會將MiFare響應放在狀態字中(但是,嘿,我在一年前的某一天編寫了界面,我的思想不再那麼年輕)。如果使用密鑰成功加載密鑰,您是否嘗試過? –

+0

鑰匙必須裝入讀卡器內存的** volatile **部分。示例交出'KeyStructure,NonVolalatileMemory'。按照描述的方式進行操作**先生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

@MatthiasFuchs如果這是正確的答案,標記爲正確的,以幫助其他人尋找解決方案。 –