カードと端末の間に安全なチャネルを生成したい。これは私のコードです:私は、コマンド80 50 20 00 08 01 15 6A 2A F5 64 87 CF
私はエラー6a88
を取得し、私はコマンド00 50 20 00 08 01 15 6A 2A F5 64 87 CF
を送信するとき、私はエラーを取得し6e00
を送信カードと端末の間に安全なチャネルを生成する
final static byte INIT_UPDATE = (byte) 0x50;
final static byte EXT_AUTHENTICATE = (byte) 0x82;
SecureChannel sc;
public void process(APDU apdu) throws ISOException {
if (selectingApplet()) {
return;
}
byte[] buffer = apdu.getBuffer();
short inlength = 0;
try
{
switch (buffer[ISO7816.OFFSET_INS]) {
case INIT_UPDATE:
case EXT_AUTHENTICATE:
makeSecureChannel(apdu);
break;
}
catch (CryptoException e)
{
short r = e.getReason();
ISOException.throwIt(r);
}
}
private void makeSecureChannel(APDU apdu)
{
byte[] buf = apdu.getBuffer();
byte cla = buf[ISO7816.OFFSET_CLA];
byte ins = buf[ISO7816.OFFSET_INS];
try
{
apdu.setIncomingAndReceive();
if(ins == INIT_UPDATE)
{
sc = GPSystem.getSecureChannel();
}
short len = sc.processSecurity(apdu);
apdu.setOutgoing();
apdu.setOutgoingLength(len);
apdu.sendBytes(ISO7816.OFFSET_CDATA, (short) len);
}
catch(APDUException ex1)
{
ISOException.throwIt(ex1.getReason());
}
}
。 全身で私を助けることができますか?
エラーを特定のコード行にローカライズできますか?デバッグできますか?カードがこのグローバルプラットフォームAPI呼び出しをサポートしていますか? –
APDUコマンドを送信する前にアプレットを選択しましたか?キーバージョン== 0x20のカードにキーセットがありますか?いいえの場合は、0x20を0x00に置き換えます。 – Abraham