繁体   English   中英

智能卡的响应状态字0x61xx的含义是什么?

[英]What is meaning of the response status word 0x61xx from a smart card?

我编写了一个Java Card小程序,它将一些数据保存到偏移ISO7816.OFFSET_CDATA的APDU缓冲区中,并将这些字节作为响应发送。

Util.arrayCopy(Input_Data, (short)0, buffer, (short) ISO7816.OFFSET_CDATA, (short)Datalength);
apdu.setOutgoing();
apdu.setOutgoingLength((short)(DataLength) );

apdu.sendBytesLong(buffer, ISO7816.OFFSET_CDATA, (short)(DataLength));

我在模拟器中测试了这个没有任何问题。 但是当我在真正的智能卡(由金雅拓制造的Java Card 0x6180 )上测试时,我得到状态字0x6180作为响应。

我的命令APDU是00 40 00 00 80 Data ,其中数据长度为128字节,因此缓冲区中有4 + 128字节,(260-(4 + 128))字节为空。

您的模拟器可能使用T=1传输协议,但您的真实卡不会。 它使用T=0协议,这意味着它可以接收数据,也可以在单个APDU中发送数据。

状态字0x6180表示从卡接收0x80字节。 通常, 61XX表示接收XX个字节。

怎么收到它们? 好吧,有一个名为GET RESPONSE的特殊APDU命令。 每次获得61XX状态字时都应该调用它。 使用XX作为GET RESPONSE APDU的Le字节

APDU -> 61 XX
00 C0 00 00 XX -> your data 90 00

关于您的代码的一些其他说明:

  • DatalengthDataLength
  • 将输出数据复制为0而不是ISO7816.OFFSET_CDATA
  • 你为什么投DataLengthshort每个时间? short吗? 那时候不要施放。 byte吗? 然后你以错误的方式抛出它,因为无符号字节值> 0x80将被强制转换为负的short (short) (DataLength & 0xFF)符号byteshort的正确转换是(short) (DataLength & 0xFF)
  • setOutgoingAndSend使用setOutgoingAndSend 它简单得多。
  • 每当不复制到持久数组时,请使用arrayCopyNonAtomic而不是arrayCopy arrayCopyNonAtomic性能要好得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM