我的applet有点问题。它在我的一些Java卡上工作得很好,但在其他一些卡上它工作得很粗略!它以一种发送回数组的方式编写,但它只返回它的第一个字节。我尝试了不同的方法,但它总是只发送第一个字节。这是卡错误还是我的应用程序?这是一个示例函数。这个函数运行正常,只将我的一半卡片中的整个数组发送出去而不是全部!
public void testA(APDU apdu)
{
Util.arrayCopyNonAtomic(keyParameters.getA(), (short) 0, apdu.getBuffer(), (short) 0, (short) keyParameters.getA().length);
apdu.setOutgoingAndSend((short) 0, (short)keyParameters.getA().length);
}
PS。 我正在使用两种类型的金雅拓卡,其中一种可能有NFC。
答案 0 :(得分:0)
以下是最可能的解决方案:
由于你没有附上完整的源代码,我怀疑“(短)keyParameters.getA()。length”实际上是1。
如果您确定... getA()。length的值,您可以尝试将代码修改为:
Util.arrayCopyNonAtomic(keyParameters.getA(), (short) 0, apdu.getBuffer(), ISO7816.OFFSET_CDATA, (short) keyParameters.getA().length);
apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, (short)keyParameters.getA().length);
请参阅,通常APDU标头(apdu缓冲区的前5个字节)不允许在某些Java卡中更改。因此,存储要从APDU缓冲区的CDATA(偏移= 5)发送的数据是安全的。它应该工作正常。