2017-01-05 43 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)に関する情報も得ました。 私は、読み取り/書き込み操作を実行するためにカードのメモリにアクセスする前に認証を行う必要があることを認識しており、標準のKey値を知っています。

私はGitHubからpcsc-sharpのサンプルをダウンロードし、Mifare1kTestの例を実行しました。私は動作しますが、012行目のcard.LoadKeyは失敗します。 LoadKeyのApduコマンドの応答値は、SW1 = 99 SW2 = 0です。これはどのドキュメントでも見つかりません。 「新しい例外をスローする」セクションをコメントアウトすると、このサンプルが動作します。

ここで私の質問は、正確な値がCard.LoadKeyに渡される正しい値で、Apduコマンドのパラメータに使用する正しい値です。 "keynumber"(Sectumberumber - Sector/Block Combination)とは何ですか?例がうまくいけば、LoadKeyコールが必要ですか?

すべてのヘルプは

敬具

をapreciatedさ

マティアス

+0

通常、9xxxの範囲にあるものはすべて成功し、xxxは追加情報です。私が正しく覚えていれば、APDUラップはMiFareレスポンスをステータス・ワードに入れます(しかし、ちょっと、私は1年前にインタフェースをプログラミングしました、何年前、私の心はそれ以上若々しくありません)。キーを使用してキーロードが成功した場合は試しましたか? –

+0

リーダのメモリの** volatile **部分にキーをロードする必要があります。この例は、 '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それが正しい答えであれば、それは他の人が解決策を探すのを助けるために正しいとマークしています。 –