簡體   English   中英

從Java智能卡APDU收到奇怪的數據?

[英]Strange data received from java smart card APDU?

我可以毫無問題地從智能卡發送大多數數據。 我注意到由於某些原因,我總是需要刪除APDU中的前6個字節才能獲取真實數據。

但是,在發送一個特定數據時,很難知道數據在APDU中的位置。

這是Java智能卡模擬器的代碼:

data = new byte[] {(byte)0x6302}; 
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);

預期發送/接收的數據是:

{} 0X2

但是,中間件響應APDU中收到的數據是:

responseApdu.getData():

{0x80、0x32、0x0、0x0、0x8、0x0、0x0、0x1、0x5c,0x6、0xf9、0x63、0x33、0x1、0x2、0x90、0x0}

我還嘗試記錄Java卡模擬器發送的APDU。 它是以下數據:

SendAPDU()數據(apdu.getBuffer()):

{0x2、0x32、0x0、0x0、0x8、0x0、0x0、0x1、0x5c,0x6、0xf9、0x63、0x33、0x0 .....(此后均為0x0)}

偏移CDATA:5

有人可以幫我理解為什么發送的數據(甚至在發送之前讀取)與實際發送的數據有何不同嗎? 是某種填充嗎? 如何獲取原始數據?

將代碼更改為:

data = new byte[] {(byte) 0x63, (byte) 0x02}; 
apdu.setOutgoing();
apdu.setOutgoingLength((short) data.length);
apdu.sendBytesLong(data, (short) 0, (short) data.length);

數據字節{0x63,0x02}將被發送出去。

以及您在問題中提到的數據:

  1. 響應APDU數據為:
 responseApdu.getData(): {0x80, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x1, 0x2, 0x90, 0x0} 

表示命令數據為: { 0x80, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x1}; ,響應數據為: { 0x2, 0x90, 0x0 } ;

  1. apdu緩沖區是:
 SendAPDU() data (apdu.getBuffer()): {0x2, 0x32, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x5c, 0x6, 0xf9, 0x63, 0x33, 0x0, ..... (all 0x0 after this point)} Offset CDATA: 5 

意味着將發送數據字節0x02(發送的長度為1個字節),在該字節之后將發送SW 0x9000({0x90,0x00})。 傳出時不使用偏移CDATA。 APDU緩沖區中的其他數據字節是您的APDU命令,第一個字節被傳出字節覆蓋(這里只有1個字節,0x02)。

注意 :APDU.sendBytesLong(data,offset,length)的過程:

1)。 將具有偏移量和長度的數據復制到APDU緩沖區;

2)。 使用APDU緩沖區發送數據;

3)。 發送SW;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM