我寫了一個非常簡單的程序爲我的Java卡如下:錯誤6985和6988中的小應用程序的安裝過程
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
& 6988
當我嘗試使用安裝它JCManager:
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命令!我剛剛收到它,製作了它的副本,更改了副本,並再次發送原始緩衝區!對?
下來選民,請解釋爲什麼? – Jean 2015-02-09 16:00:32
請一次詢問一個問題(沒有downvote)。請注意,你的APDU處理是不存在的,你的代碼也是錯誤的('received.length + 1'顯然不適合APDU緩衝區,你需要接收數據才能改變它) – 2015-02-10 00:31:39
@MaartenBodewes好的謝謝。 **請注意,您的APDU處理是不存在的**,我可以請您解釋它嗎? 「不存在」是什麼意思?(如果可能,請將其作爲答案並讓我檢查它。) – Jean 2015-02-10 02:39:45