[英]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}將被發送出去。
以及您在問題中提到的數據:
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 }
;
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.