我为我的java卡写了一个非常简单的程序如下:
package myFirstApplet;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
public class ECHO extends Applet
{
private ECHO()
{
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException
{
new ECHO().register();
}
public void process(APDU arg0) throws ISOException
{
byte[] received=arg0.getBuffer();
++received[(short)(received.length+1)];
arg0.setOutgoingAndSend((short)0, (short)received.length);
}
}
它以接收APDU命令的方式编写,将其添加一个并再次发送给持卡人。
成功将其转换为 .cap 文件后,当我想使用 GP工具安装它时,我收到6985
错误:
GP: gp -install d:\myFirstApplet.cap
openkms.gp.GPException: LOAD failed SW: 6985
at openkms.gp.GlobalPlatform.check(GlobalPlatform.java:924)
at openkms.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:606)
at openkms.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:565)
at openkms.gp.GPTool.main(GPTool.java:330)
GP:
6985
&当我尝试使用 JCManager
6988
Authenticated
************
UplaodCAP
*************
Get AID from header.cap file
FOR LOAD DATA: EF 04 C6 02 01 28
AID:01 02 03 04 05 06 07 08 09 00
Applet AID:01 02 03 04 05 06 07 08 09 00 00
Try to delete if existing...
-> 84 E4 00 00 18 90 5E F7 BC 5C 13 70 27 E5 F1 26 4F AC 70 96 B8 FE F5 89 CC 93 D7 2E 24
<- 6A 88
-> 84 E4 00 00 18 3D 62 7D 1A 35 76 4F 38 12 DE BB 69 9F 21 70 7F 29 23 08 D0 36 85 FF E5
<- 6A 88
Loading cap file. Please wait...
Install for Load
-> 84 E6 02 00 18 4F 24 95 04 0B 3A DE 26 24 1D D5 ED 5B 9A 0F D0 36 52 1E A1 AC 0B BB 76
<- 00 90 00
Load CAP
-> 84 E8 00 00 D8 52 EF 61 98 40 62 1B F1 BA D5 72 98 50 0A EC 14 27 09 59 23 57 3F FC D9 CC 74 6C 74 0D 4D 03 18 EB 86 C2 6F 2D C6 AB EF 57 01 FB 7C 6D 92 72 58 02 9C 35 2F BF 32 35 E7 26 5E 48 9E D9 81 B2 13 14 DF FA 7C D3 F7 09 D4 8B 01 4E 2C 1B BC B5 80 A9 36 32 86 13 DB D2 58 52 34 93 54 23 48 68 8E 05 A5 83 0A D0 EC D5 BA 0E E5 C5 3E 58 6E 9C F4 D8 D5 CE 53 D7 03 D7 3A 92 A9 71 10 F6 7C 1C 42 30 71 12 B1 E8 15 75 0A C3 8E 11 8E 95 C5 E8 42 8F 11 B4 E2 1E DF 78 EE FF FE 43 C6 53 E5 B2 45 CB FE B8 AE 19 1A 62 78 10 EE E3 A1 AD AA 3E 13 75 EB 7C A2 19 84 31 3D D8 BD 7D 35 43 A4 A8 F6 B3 01 C9 30 A3 F6 A8 3B DD 9E 71 5C C8 A0 BB 46 72 E4 CC 4A A0 09 46 F3
<- 69 85
-> 84 E6 0C 00 38 4F 24 95 04 0B 3A DE 26 82 5E CB 04 65 42 EB 3E 4F 8A 6D 37 18 E0 79 79 44 1F 58 55 DB 4E 50 BC 8F 4D 73 2A BC 60 80 42 60 A9 9B 3E 81 0A 95 85 DA 65 2B AA 91 82 CF 7A
<- 6A 88
Could not load applet. See debug for more info
我错了什么?
而且我对我的程序的process
方法感到有些困惑。
在第一行中,我将APDU缓冲区的内容复制到名为Received
的数组中:
byte[] received=arg0.getBuffer();
在第二行中,我添加了一个数组的最后一个成员:
++received[(short)(received.length+1)];
现在我将APDU缓冲区发送给用户:
arg0.setOutgoingAndSend((short)0, (short)received.length);
右?如果是这样,我没有改变接收APDU命令!我刚收到它,制作了它的副本,更改了副本,然后再次发送原始缓冲区!正确?
答案 0 :(得分:0)
加载软件的自述文件具有获得支持的非常简单的指南:
https://github.com/martinpaljak/GlobalPlatformPro#contact
此外,您的包名称表明您没有使用最新版本。请在发送任何日志之前使用最新版本。
我怀疑小程序不适合您的卡,因为您使用的是您的卡所没有的功能(包)。在这种情况下,我怀疑你的上限是针对较新的javacard版本。