2011-07-26 40 views

回答

1

一般來說,不可能使用標準Java Card API從卡中獲得確切數量的可用內存。由於大多數Java卡甚至沒有整數支持,所以您可以從API方法獲得的最大值是32767(簽名short的上限)。

如果幸運的話,卡/ OS製造商可能會有一些專有的API方法。我已經看到了恩智浦JCOP卡的一些專有API,但如果它超出了簽名short的上限,它們都不能獲得可用內存量。

+0

我真正想要的是通過GlobalPlatform界面詢問卡的方法。如果這樣的事情不存在,那就是我的答案。 –

+0

有沒有這樣的事情,有你的答案。 groissi提到了專有的API,並且GP 2.2中還有內存配額管理,但它是否在任何給定的卡上實現取決於製造商。即使存在,卡片也難以爲您提供確切數量的可用內存 - 它們肯定會爲交易和內部操作保留一筆不錯的數額。 – foo

2

Java卡與GP 2.2 + ETSI支持

如果你的卡支持全球平臺2.2和ETSI,您可以使用GET DATA命令。

GP卡規範2.2節11.3指出

Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226. 

而且在ETSI 102.226節8.2.1.7.2:

命令成功執行後,GET DATA響應數據字段應按照GlobalPlatform [4]中的定義進行編碼。的TLV編碼的數據對象的值稱爲參照控制參數P1以及所述命令消息的P2是:

Length Description       Value 
    1 Number of installed application tag '81' 
    1 Number of installed application length X 
    X Number of installed application 
    1 Free non volatile memory tag   '82' 
    1 Free non volatile memory length   Y 
    Y Free non volatile memory 
    1 Free volatile memory tag    '83' 
    1 Free volatile memory length    Z 
    Z Free volatile memory 

,因爲它是用TLV格式,該命令的響應並不限於short值,這意味着你可以檢查超過32767字節的空閒內存

相關問題