2016-08-30 35 views
0

我写了一个代码,为Java卡2.2.1和我测试它的JCIDE。 我得到错误在方法Setoutgoinglength()未知的错误(6c 15)与Java卡中的Setoutgoinglength 2.2.1

public void getoutput(APDU apdu) 
{ 
    byte [] buffer = apdu.getBuffer(); 
    byte hello[] = {'H','E','L','L','O',' ','W','O','R','L','D',' ', 'J','A','V','A',' ','C','A','R','D'}; 
    short le = apdu.setOutgoing(); 
    short totalBytes = (short) hello.length; 
    Util.arrayCopyNonAtomic(hello, (short)0, buffer, (short)0, (short)totalBytes); 

    apdu.setOutgoingLength(totalBytes); 
    apdu.sendBytes((short) 0, (short) hello.length);} 
+0

您可以发送您发送的APDU吗? – Chooch

+0

谢谢你的回答。我发送“00 40 00 00 00”我的ins = 40和lc = 00 –

+1

谢谢。顺便说一句,我只想指出APDU中的最后一个字节被认为是Le而不是Lc。 Lc仅在命令数据字段存在时才存在。否则,第五个字节将被视为Le。 – Chooch

回答

0

6CXX意味着你的乐不等于响应数据的正确长度(XX等于正确的响应数据的长度)。 6C15明确表示要使用的正确Le应该是0x15

发生了什么事是你的乐场是0x00(这实际上是由卡以十进制形式解释为256),但你使用totalBytes,其中有0x15的值作为参数传递给apdu.setOutgoingLength()这不等于256。

要发送的正确APDU是00 40 00 00 15

+0

谢谢你的帮助,但在这个例子中它很简单,但另一个样本可能是difficult。我如何计算答案长度?我想执行getoutput()我不知道答案的长度。 –

+0

如何从我的主机发送apdu?一直以来我应该知道回应的长度? –

+0

@FatemeJafari这很简单:只需等待6CXX并用Le = XX回应即可。当然,在卡片告诉它之前,你无法知道正确的Le。 – vojta