如何使用 "process" 方法将 "install" 方法参数发送到卡片 reader?
How to send "install" method arguments to the card reader using "process" method?
我为我的 java 卡写了一个小程序,我想将 install
方法的参数发送到 CAD。所以我在我的小程序中定义了两个名为 theArray 和 arrayLength 的 static 变量。之后,我在该方法的主体内复制了 install
方法参数。最后我尝试在 process
方法中将此变量 return 转换为 CAD。但是在 SELECT
命令的响应中,卡 returns SW=6F00
.
package bArrayAccessibilty;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class BArrayReturner extends Applet {
public static byte[] theArray;
public static short arrayLength;
private BArrayReturner() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new BArrayReturner().register();
BArrayReturner.arrayLength=(short)bArray.length;
Util.arrayCopyNonAtomic(bArray, (short)0,BArrayReturner.theArray , (short) 0, BArrayReturner.arrayLength);
}
public void process(APDU apdu) throws ISOException {
byte[] buffer=apdu.getBuffer();
Util.arrayCopyNonAtomic(BArrayReturner.theArray, (short)0,buffer , (short) 0, BArrayReturner.arrayLength);
apdu.setOutgoingAndSend((short)0, (short)255);
}
请注意,静态字段的初始化不会改变任何内容。
我的意思是,我也在 class 正文中尝试了这一行:
public static byte[] theArray=null;
public static short arrayLength=0;
但没有任何改变。
我的程序有什么问题?
安装小程序时会调用安装方法。
当您(select 首先)向 instantiated/installed 小程序发送命令时,将调用 process 方法。
这意味着安装方法将首先被调用,因此:
你的第一个错误是你想写入一个未初始化的数组(theArray == null)
你的第二个错误是Util.arrayCopyNonAtomic的错误参数(注意安装方法传递的offsetParameter)
我为我的 java 卡写了一个小程序,我想将 install
方法的参数发送到 CAD。所以我在我的小程序中定义了两个名为 theArray 和 arrayLength 的 static 变量。之后,我在该方法的主体内复制了 install
方法参数。最后我尝试在 process
方法中将此变量 return 转换为 CAD。但是在 SELECT
命令的响应中,卡 returns SW=6F00
.
package bArrayAccessibilty;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class BArrayReturner extends Applet {
public static byte[] theArray;
public static short arrayLength;
private BArrayReturner() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new BArrayReturner().register();
BArrayReturner.arrayLength=(short)bArray.length;
Util.arrayCopyNonAtomic(bArray, (short)0,BArrayReturner.theArray , (short) 0, BArrayReturner.arrayLength);
}
public void process(APDU apdu) throws ISOException {
byte[] buffer=apdu.getBuffer();
Util.arrayCopyNonAtomic(BArrayReturner.theArray, (short)0,buffer , (short) 0, BArrayReturner.arrayLength);
apdu.setOutgoingAndSend((short)0, (short)255);
}
请注意,静态字段的初始化不会改变任何内容。
我的意思是,我也在 class 正文中尝试了这一行:
public static byte[] theArray=null;
public static short arrayLength=0;
但没有任何改变。
我的程序有什么问题?
安装小程序时会调用安装方法。
当您(select 首先)向 instantiated/installed 小程序发送命令时,将调用 process 方法。
这意味着安装方法将首先被调用,因此:
你的第一个错误是你想写入一个未初始化的数组(theArray == null)
你的第二个错误是Util.arrayCopyNonAtomic的错误参数(注意安装方法传递的offsetParameter)