智能卡的响应状态字0x61xx是什么意思?

Ftm

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

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 v2.2.1)上进行测试时,我得到了状态字0x6180作为响应。

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

伏塔

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

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

如何接收它们?好吧,有一个特殊的APDU命令称为GET RESPONSE每当您收到61XX状态字时,都应该调用它使用XXLe您的字节GET RESPONSEAPDU

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

有关代码的其他一些注意事项:

  • DatalengthDataLength
  • 将输出数据复制到0而不是ISO7816.OFFSET_CDATA
  • 为什么你投DataLengthshort每次?short那就不要投。byte然后,您以错误的方式进行了强制转换,因为无符号字节值> 0x80将被强制转换为负数short从无符号byte到a的正确转换short(short) (DataLength & 0xFF)
  • setOutgoingAndSend尽可能使用这要简单得多。
  • 使用arrayCopyNonAtomic而不是arrayCopy在不复制到持久性阵列时使用。的性能arrayCopyNonAtomic要好得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

下面的智能卡命令是什么意思?

来自分类Dev

如何发送包含返回数据和0x9000以外的状态字的响应APDU?

来自分类Dev

对于SD卡,100x是什么意思?

来自分类Dev

`((void(*)())0x1000)();是什么意思?

来自分类Dev

mode(x).mode[0] 是什么意思?

来自分类Dev

这个 X[0, :] 符号是什么意思?

来自分类Dev

这意味着“ 0x15000字节”是什么意思,该0x123是什么类型的编码?

来自分类Dev

“程序无响应”是什么意思?

来自分类Dev

“程序无响应”是什么意思?

来自分类Dev

信号状态是什么意思?

来自分类Dev

onOpen 状态“失败”是什么意思?

来自分类Dev

智能卡获取响应返回状态6D00

来自分类Dev

replace('\0','0') 是什么意思?

来自分类Dev

-d 0/0 是什么意思?

来自分类Dev

什么是特定的智能卡传输协议?

来自分类Dev

“ #define X X”是什么意思?

来自分类Dev

x =!x是什么意思?

来自分类Dev

(〜0L)是什么意思?

来自分类Dev

(char *)0是什么意思?

来自分类Dev

JavaScript:“ void 0”是什么意思?

来自分类Dev

yytext [0]是什么意思?

来自分类Dev

s [-1] = 0是什么意思?

来自分类Dev

(0,somefunc] [args)是什么意思

来自分类Dev

“ this.this $ 0”是什么意思?

来自分类Dev

Binding =“ {绑定(0)}”是什么意思?

来自分类Dev

“?1:0”是什么意思

来自分类Dev

assert(0)是什么意思?

来自分类Dev

$ {_ [0]}在bash中是什么意思?

来自分类Dev

((Struct *)0)是什么意思?