是否可以查询GlobalPlatform智能卡的剩余持久内存?

时间:2011-07-26 21:53:52

标签: smartcard javacard

我有一个JavaCard并且可以调用JCSystem.getAvailableMemory(MEMORY_TYPE_PERSISTENT)并从我的applet返回它,但是如果它超过32767字节,我想要一个确切的值。

2 个答案:

答案 0 :(得分:2)

Javacard支持GP 2.2 + ETSI

如果您的卡支持Global Platform 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]中的定义进行编码。在命令消息的参考控制参数P1和P2中引用的TLV编码数据对象的值是:

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

此命令的响应不限于short值,因为它使用的是TLV格式,这意味着您可以检查超过32767字节的空闲内存

答案 1 :(得分:1)

通常,使用标准Java Card API无法从卡中获取确切的可用内存量。由于大多数Java卡甚至没有整数支持,因此您可以从API方法获得的最大值是32767(签名短的上限)。

如果幸运的话,卡/ OS制造商可能会有一些专有的API方法。我已经看过NXP JCOP卡的一些专有API,但如果它超过签名短片的上限,它们都不能获得可用内存量。