-1

我的小程序有一点问题。它在我的一些 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。我正在使用 2 种类型的金雅拓卡,其中一种可能具有 NFC。

4

1 回答 1

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);
    

看,通常不允许在某些 java 卡中更改 APDU 标头(apdu 缓冲区的前 5 个字节)。因此,存储要从 APDU 缓冲区的 CDATA(偏移量 =5)发送的数据是一种安全的做法。它应该可以正常工作。

于 2015-04-14T04:33:02.803 回答