我试图从JC 2.2.2卡发送数据文件到主机应用程序。所有文件都小于256字节。但是数据需要加密和签名(用于安全消息),如下所示。将MAC添加到加密数据后,某些文件的长度会超过256个字节。但我使用扩展长度,所以我认为一次发送超过256个字节没有问题。如果结果密码加上MAC小于256字节,程序工作正常。以下是一段将响应apdu发送给主机的代码。扩展长度不适用于T = 1
Util.arrayCopyNonAtomic(file, offset, buffer, (short)0, file.length);
respLength = secureCrypto.wrapResponseAPDU(ssc, apdu, buffOfset, file.length);
apdu.setOutgoing();
apdu.setOutgoingLength(respLength); // 0x6F00 error occurs during the execution of this line
apdu.sendBytesLong(buffer, (short)0, respLength);
卡详细信息:
Terminal found : 2
PC/SC terminal OMNIKEY CardMan 5x21 0
PC/SC terminal OMNIKEY CardMan 5x21-CL 0
ATR: 13 bytes
Card Info : PC/SC card in OMNIKEY CardMan 5x21-CL 0, protocol T=1, state OK
在主机端,我得到0x6F00错误代码。我追踪了程序,发现在执行apdu.setOutgoingLenght(respLength)期间发生错误。另外我的applet类实现了ExtendedLength接口。任何有用的信息请
您确定该卡支持扩展长度的APDU吗?你是否发送了命令,它是由你的代码以扩展长度的APDU格式实现的? – guidot 2013-04-24 07:47:44
对于你的第一个问题,我会说是,因为我使用JC 2.2.2和T = 1协议。对于第二个问题,我不确定,我不知道我是否必须做这样的事情。请给我一个扩展长度格式化的APDU的例子,你会更有帮助吗? – ally 2013-04-24 08:40:55
我只能参考ISO 7816第4部分,它描述了字节格式。 LC的第一个字节为零的3字节规范表示扩展长度的LC字段,这也要求LE字段的扩展格式为2字节)。在没有LC的情况下,LE规范具有额外的前导零字节,接着是两个字节长度。如果你给你的应用程序语言和使用的API可能是别人可以帮助你进一步。 – guidot 2013-04-24 10:28:27