gpt4 book ai didi

java - 如果命令数据超过3个字节,如何获取?

转载 作者:行者123 更新时间:2023-11-30 06:04:20 25 4
gpt4 key购买 nike

我想知道如果buffer[ISO7816.OFFSET_LC]>=3,如何通过APDU命令发送数据。

其实我正在使用

if (numBytes == 1) {
shortAmount = (short) buffer[ISO7816.OFFSET_CDATA];
} else if (numBytes == 2) {
shortAmount = (short) Util.getShort(buffer, ISO7816.OFFSET_CDATA);
} else if(numBytes == 3) {
//how to get the all data contained in the APDU?
}

最佳答案

对于大多数 Java Card 实现,不支持 int 基本类型。这意味着您不能在一个变量中存储超过 16 位。

但是您可以将其存储在数组中。而且 - 当你想到它时 - 它已经是了。 APDU 缓冲区只不过是 transient 内存(通常是 RAM)中的字节数组*1。

因此,如何处理 APDU 缓冲区中的 APDU 数据取决于您:

  • 您可以解析 APDU 缓冲区内的结构;
  • 您可以将其复制到另一个数组,持久数组(EEPROM/Flash,使用new byte[size])或 transient 内存(RAM,通过JCSystem.makeTransientByteArray() )
  • 您可以使用 Util.getShort() 将其转换为 Shorts,并将结果存储在类似于字节数组的 short 数组中;
  • 您可以将其用作任何允许从字节数组输入的 API 的输入,例如 Key#setValue 命令之一,OwnerPIN#check(),签名验证等等等等.

或者您可以执行上述任意组合。

如果您想使用更大的值执行计算,您必须实现这些计算或有权访问特殊的库。对于 32 位整数计算,请查看 at my X-mas special answer 。这也表明对数据进行任何类型的计算都是可能的,即使您必须自己实现它们。 Java Card 是图灵完备的,因此只要您没有耗尽 CPU 时间或内存,您就可以对其进行任何计算。


*1 好的,APDU 缓冲区在 Java Card 系统处理方式上是一个相当特殊的数组,但在数据处理过程中,它只是充当普通的 Java Card 字节数组。

关于java - 如果命令数据超过3个字节,如何获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com