私は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さマティアス
通常、9xxxの範囲にあるものはすべて成功し、xxxは追加情報です。私が正しく覚えていれば、APDUラップはMiFareレスポンスをステータス・ワードに入れます(しかし、ちょっと、私は1年前にインタフェースをプログラミングしました、何年前、私の心はそれ以上若々しくありません)。キーを使用してキーロードが成功した場合は試しましたか? –
リーダのメモリの** volatile **部分にキーをロードする必要があります。この例は、 'KeyStructure、NonVolalatileMemory'を手渡します。このようにすると、**下の答えのMr Heart **が動作します。 SW1/SW2の結果は90 00です。 ありがとうございます。 –