我可以從智能卡發送大部分數據,沒有問題。我注意到我總是需要刪除APDU中的前6個字節以獲得真實數據。從java智能卡APDU接收到奇怪的數據?
但是,當發送一個特定的數據時,很難知道數據在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,0×90,爲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)0x6302};'創建一個只有一個字節元素0x02的字節數組。它真的是你想要的嗎? – nandsito
@nandsito這是一個讓中間件知道將特定數據發送回java卡的小消息。但是,我無法從中間件檢索0x02(請參閱輸出)。 –
您的命令的第一個字節(CLA字節)設置爲0x02。這意味着你使用邏輯通道3.這不是可能的工作,我想知道爲什麼第一個字節有這樣的價值。響應看起來像一個改變後的命令APDU,後面是響應,包括長度和狀態字;我沒有看到對此的直接解釋。然而,將CLA字節設置爲0x00或0x80可能值得嘗試。 –