2016-07-22 223 views
1

我想寫的使用上卡擴展長度APDU長度0x2CF0字節的數據,它工作正常的卡大的數據。但是我無法使用擴展長度apdu從卡中讀取相同數量的數據。無法讀取使用擴展長度APDU

我收到以下錯誤, 「sun.security.smartcardio.PCSCException:未知錯誤0x4d3」。

當我嘗試加載大小的相對較小的數據0x1af0字節我能夠成功地寫和從使用擴展長度APDU卡上讀取。

是否有相對於從在延伸長度APDU卡上讀取的數據的任何限制?有沒有使用命令鏈接的解決方法?

PS:我使用JCOP 2.4.2 R2卡。

回答

2

一個典型的智能卡存儲要發送到讀卡器的數據在RAM中。 (其中,這使得更容易確保沒有發送來自非易失性存儲器的祕密數據)。智能卡芯片內存有限,你可以感到幸運,你的較小嚐試(超過6 k)仍然有效。

不幸的是在ATR的卡只能指示,它支持擴充長度的APDU在所有,但達不到其邊界(其也可能會發生變化,如果輸出進行安全的消息處理)。

的典型方法是,向用戶提供某種內部分隔的,例如一個命令。 G。在基於文件系統的文件中,使用二進制文件的概念,並且該命令可以指定起始偏移量,參見this question

鏈接通常不會幫助;因爲MAC計算需要存在整個數據,所以架構通常在所有其他情況下強制執行此操作。

+1

最新的ISO 7816應該能夠顯示緩衝區大小,即使沒有客戶端/讀卡器和智能卡支持,可能沒有多大意義的輔助措施的等。當然。 –

+0

嗨Guidot,是否有可能使用.apdu.setOutgoing()從卡讀取這樣的大數據; apdu.setOutgoingLength(); apdu.sendBytesLong()命令組合?我可以設置出去的長度爲0x2CF0並調用多個apdu.sendBytesLong()? – Narasimha

+0

@Narasimha:不,你必須檢查你的卡,它支持什麼作爲最大輸出大小,並使用相應的起始偏移量增量進行循環。 – guidot