javacard只从数组发送一个/第一个字节

时间:2015-04-09 15:26:32

标签: javacard gemalto

我的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。

1 个答案:

答案 0 :(得分:0)

以下是最可能的解决方案:

  1. 由于你没有附上完整的源代码,我怀疑“(短)keyParameters.getA()。length”实际上是1。

  2. 如果您确定... 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);
    
  3. 请参阅,通常APDU标头(apdu缓冲区的前5个字节)不允许在某些Java卡中更改。因此,存储要从APDU缓冲区的CDATA(偏移= 5)发送的数据是安全的。它应该工作正常。