카드와 터미널간에 보안 채널을 생성하고 싶습니다. 이건 내 코드입니다 : 내가 명령 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