2016-07-22 217 views
1

我想写的使用上卡扩展长度APDU长度0x2CF0字节的数据,它工作正常的卡大的数据。但是我无法使用扩展长度apdu从卡中读取相同数量的数据。无法读取使用扩展长度APDU

我收到以下错误, “sun.security.smartcardio.PCSCException:未知错误0x4d3”。

当我尝试加载大小的相对较小的数据0x1af0字节我能够成功地写和从使用扩展长度APDU卡上读取。

是否有相对于从在延伸长度APDU卡上读取的数据的任何限制?有没有使用命令链接的解决方法?

PS:我使用JCOP 2.4.2 R2卡。

回答

2

一个典型的智能卡存储要发送到读卡器的数据在RAM中。 (其中,这使得更容易确保没有发送来自非易失性存储器的秘密数据)。智能卡芯片内存有限,你可以感到幸运,你的较小尝试(超过6 k)仍然有效。

不幸的是在ATR的卡只能指示,它支持扩充长度的APDU在所有,但达不到其边界(其也可能会发生变化,如果输出进行安全的消息处理)。

的典型方法是,向用户提供某种内部分隔的,例如一个命令。 G。在基于文件系统的文件中,使用二进制文件的概念,并且该命令可以指定起始偏移量,参见this question

链接通常不会帮助;因为MAC计算需要存在整个数据,所以架构通常在所有其他情况下强制执行此操作。

+1

最新的ISO 7816应该能够显示缓冲区大小,即使没有客户端/读卡器和智能卡支持,可能没有多大意义的辅助措施的等。当然。 –

+0

嗨Guidot,是否有可能使用.apdu.setOutgoing()从卡读取这样的大数据; apdu.setOutgoingLength(); apdu.sendBytesLong()命令组合?我可以设置出去的长度为0x2CF0并调用多个apdu.sendBytesLong()? – Narasimha

+0

@Narasimha:不,你必须检查你的卡,它支持什么作为最大输出大小,并使用相应的起始偏移量增量进行循环。 – guidot