2015-02-09 23 views
0

我寫了一個非常簡單的程序爲我的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命令!我剛剛收到它,製作了它的副本,更改了副本,並再次發送原始緩衝區!對?

+1

下來選民,請解釋爲什麼? – Jean 2015-02-09 16:00:32

+1

請一次詢問一個問題(沒有downvote)。請注意,你的APDU處理是不存在的,你的代碼也是錯誤的('received.length + 1'顯然不適合APDU緩衝區,你需要接收數據才能改變它) – 2015-02-10 00:31:39

+0

@MaartenBodewes好的謝謝。 **請注意,您的APDU處理是不存在的**,我可以請您解釋它嗎? 「不存在」是什麼意思?(如果可能,請將其作爲答案並讓我檢查它。) – Jean 2015-02-10 02:39:45

回答

0

加載軟件的README對獲取支持非常簡單的指南:

https://github.com/martinpaljak/GlobalPlatformPro#contact

而且,你的包顧名思義您不使用最新版本。發送任何日誌前請使用最新版本。

我懷疑applet不適合你的卡,因爲你正在使用你的卡沒有的功能(包)。在這種情況下,我懷疑你的上限目標是更新的javacard版本。

+0

1-我在10小時前下載了** gp.exe **! 2 - 我的智能卡是JavaCard 3.0.1! – Jean 2015-02-09 15:31:05