3
我想生成卡与终端之间的安全通道。这是我的代码:生成卡与终端之间的安全通道
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());
}
}
当我发送命令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
。 每个人都可以帮助我吗?
您可以将错误本地化为特定的代码行吗?你能调试吗?您确定您的卡支持此全球平台API调用吗? –
您是否在发送APDU命令之前选择了您的小程序?你的钥匙版本是否设有钥匙== 0x20?如果不是,则用0x00替换0x20。 – Abraham