3
我需要使用脫離字節代碼驗證器驗證Java卡程序(cap文件)。 我有手動修改帽文件中的信息,我想驗證新的帽文件是否是好的類型。字節代碼脫機驗證器的上限文件
我嘗試使用com.sun.javacard.scriptgen.CAP.verifyCAP()方法。我發送有效和無效的帽文件,但結果總是等於0.
我需要使用脫離字節代碼驗證器驗證Java卡程序(cap文件)。 我有手動修改帽文件中的信息,我想驗證新的帽文件是否是好的類型。字節代碼脫機驗證器的上限文件
我嘗試使用com.sun.javacard.scriptgen.CAP.verifyCAP()方法。我發送有效和無效的帽文件,但結果總是等於0.
我從來沒有發佈解決方案。那天終於到了;)
下載JavaCard SDK。它包含驗證器的編譯版本。例如java_card_kit-2_2_1。
我的文件:
./
./java_card_kit-2_2_1/
./java2CAP.sh
./ValidApplet/
./ValidApplet/ValidApp.java
./verifyCAP.sh
java2CAP.sh:
#!/bin/bash
export JC_HOME=./java_card_kit-2_2_1
export CLASSPATH=$JC_HOME/lib/apduio.jar:$JC_HOME/lib/apdutool.jar:$JC_HOME/lib/jcwde.jar:$JC_HOME/lib/converter.jar:$JC_HOME/lib/scriptgen.jar:$JC_HOME/lib/offcardverifier.jar:$JC_HOME/lib/api.jar:$JC_HOME/lib/capdump.jar:$JC_HOME/lib/:$JC_HOME/samples/classes:$CLASSPATH
PACKAGE=ValidApplet
CLASS=ValidApp
APPLET=$CLASS.java
PACKAGE_AID=0x46:0x56:0x55:0x4c:0x4e:0x54:0x45:0x53:0x54:0x53
APPLET_AID=0x46:0x56:0x55:0x4c:0x4e:0x54:0x45:0x53:0x54:0x53:0x41:0x70:0x70
javac -g -source 1.3 -target 1.1 $PACKAGE/$APPLET
java com.sun.javacard.converter.Converter -nobanner -out CAP -exportpath $JC_HOME/api_export_files -applet $APPLET_AID $CLASS $PACKAGE $PACKAGE_AID 1.0 -i
verifyCAP.sh:
#!/bin/bash
export JC_HOME=./java_card_kit-2_2_1
export CLASSPATH=$JC_HOME/lib/apduio.jar:$JC_HOME/lib/apdutool.jar:$JC_HOME/lib/jcwde.jar:$JC_HOME/lib/converter.jar:$JC_HOME/lib/scriptgen.jar:$JC_HOME/lib/offcardverifier.jar:$JC_HOME/lib/api.jar:$JC_HOME/lib/capdump.jar:$JC_HOME/lib/:$JC_HOME/samples/classes:$CLASSPATH
export CAPP_PATH=./ValidApplet/javacard
export CAPP_NAME=ValidApplet.cap
java -classpath $JC_HOME/lib/offcardverifier.jar com.sun.javacard.offcardverifier.Verifier $JC_HOME/api_export_files/javacard/framework/javacard/framework.exp $JC_HOME/api_export_files/java/lang/javacard/lang.exp $JC_HOME/api_export_files/javacard/security/javacard/security.exp $CAPP_PATH/$CAPP_NAME
./ValidApplet/ValidApp.java:
package ValidApplet;
import javacard.framework.Applet;
import javacard.framework.APDU;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
public class ValidApp extends Applet //implements PIN
{
final static byte TEST_CLA = (byte)0x77;
public static class TestClassStatic {};
protected ValidApp()
{
register();
}
public static void install(byte[] bArray, short bOffset, byte bLength)
{
new ValidApp();
}
public void process(APDU apdu)
{
byte buffer[] = apdu.getBuffer();
try {
if (buffer[ISO7816.OFFSET_CLA] == TEST_CLA) {
test((byte)4, (short)2);
} else {
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
} catch (ISOException e) {
}
}
}
爲什麼不嘗試使用Java Card開發工具的CLI工具?如果你需要一個程序,那麼你可能只是直接調用主要方法... – 2012-04-23 00:44:20
是的,但我嘗試使用Java程序,但結果是一樣的。 'capFile.verifyCAP()'或'com.sun.javacard.offcardverifier.Verifier'返回相同的結果。 – AAA 2012-04-23 21:16:08
所以,離卡驗證者需要JAR cap文件,但是我發送了一個沒有JAR的cap文件。我修改我的程序來生成JAR cap文件。 然後我不能使用'int com.sun.javacard.scriptgen.CAP.verifyCAP()'方法。結果總是0. 然後我嘗試使用'com.sun.javacard.offcardverifier.Verifier.verifyCap(FileInputStream arg0,String arg1,Vector arg2)'方法,但我不知道我必須擁有哪些參數使用。 – AAA 2012-04-25 15:18:30