1

我有一个 JavaCard,可以调用 JCSystem.getAvailableMemory(MEMORY_TYPE_PERSISTENT) 并从我的小程序中返回它,但如果它超过 32767 个字节,我想要一个准确的值。

4

2 回答 2

3

支持 GP 2.2 + ETSI 的 Javacard

如果您的卡支持 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

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

于 2014-01-23T10:03:00.560 回答
1

通常,使用标准 Java Card API 不可能从卡中获得确切的可用内存量。因为大多数 Java Card 甚至不支持整数,所以您可以从 APIs 方法获得的最大值是 32767(有符号短整数的上限)。

如果幸运的话,卡/操作系统制造商可能会提供一些专有的 API 方法。我已经从 NXP JCOP 卡中看到了一些专有 API,但如果它超过了有符号短路的上限,它们都无法获得可用内存量。

于 2011-07-29T11:09:33.803 回答