2011-12-08 15 views
6

私は、スマートカードアプリケーションを書いていますし、それが送信になるそのAIDとアプリケーションの成功の選択、後の処理オプションは奇妙な無効なCLAコマンド(6E 00)

私は6E 00をゲット応答として - 無効なCLAコマンド。これは、コマンドを送信し、応答を受信したコードの一部です:

ResponseAPDU rapdu = sendCommand(new byte[]{(byte)0x80, (byte)0xA8, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x83, (byte)0x00, (byte)0x00}); 

private ResponseAPDU sendCommand(byte[] apdu) throws CardException{ 
    CommandAPDU capdu = new CommandAPDU(apdu);   
    ResponseAPDU rpd = channel.transmit(capdu); 

    return rpd; 
} 

私はJaccalライブラリを使用してカードを読み取るために同じコマンドを使用していますし、それは完全に働いていますが、それだけではjaccalが私のために適切ではないのですそれは外部dllファイルの使用のためにアプリケーションです。なぜ私にこのような反応を与えているのか分かりません。

答えて

-1

基本的にこのエラーは、渡すコマンドが一致していないためです。最初のフィールドが正しいか間違っているかチェックします(0x80)。カードOSでは、カードOSは、 CLAが見つかりません例外は6E 00エラーコードを意味します。 あなたは何をしているのか、どのようなカード、バージョン、GPコンプライアンス、あなたが使っている既存のカードのリストを提供する必要がありますか?私はあなたを助けることができる。

6

ブログ/フォーラムのエントリ数この問題を議論:私の場合のVISAカードで

は "寛容" のように見えるが、マスターカード(6E 00)ではありません。注意してください、アドバイスとは対照的に、Java 7へのアップグレードはそれを修正しませんでした。おそらくsun.security.smartcardio.t0GetResponseの解決策と対処方法を見ているでしょう。

私はそれが動作を取得するには、以下のなかった

:GET応答で

System.setProperty("sun.security.smartcardio.t0GetResponse", "false"); 

ハンドル応答(EMV 4.3ブック1、セクション9.3.1.3を参照してください)。このリンクにも便利です。

+1

はこれが正解です。それをそのようにマークしてください。 – Brad

+0

Java 8には依然としてこの修正が必要です。 –