如題, 在使用官方給的 eclipse 插件 生成cap包後, 將cap包下載到 卡片過程 出現錯誤,
包的結構和之前用jcop工具生成的包不同
下載過程使用自己編寫的工具, 將cap包中Header.cap 等字段分別提取 並發送給卡片
具體位置是 Header.cap 和 Directory.cap 發送成功後, 發送 Import.cap 時
返回 狀態碼 6438
命令流如下:
APDUSend:
80E602000A05010203040600000000
APDU Recv:
SW: 6101
APDUSend:
00C0000001
APDU Recv:
00
SW: 9000
APDUSend:
80E8000018C416010013DECAFFED020204000105010203040603706179
APDU Recv:
SW: 9000
APDUSend:
80E800012402002100130021000A001500220018005A0018000D0000007203AF000400020008020100
APDU Recv:
SW: 9000
APDUSend:
80E800021804001502060107A0000000620101000107A0000000620001
APDU Recv:
SW: 6438
望高手 指點迷津
現將問題原因和解決過程與大家分享
問題原因: 版本號不支持.
此處版本號包括
1. java card版本號 這裡的java card 版本號 與 JCK(java card kit)版本號對應,
同時 JCK版本與JDK版本也項對應 (對應關系 查看JCK用戶手冊)
如果不對應在converter時會報錯 class 版本 xxx 不支持
2.卡內API版本號與 API庫版本號 比如GP
以上兩處 版本號不對應均會在 cap包下載到卡片的時候 報錯
1.查看卡片版本號(以下操作均在JCOP Shell下)
cm> get-data 0066
=> 80 CA 00 66 00 ...f.
(119608 usec)
<= 66 4C 73 4A 06 07 2A 86 48 86 FC 6B 01 60 0C 06 fLsJ..*.H..k.`..
0A 2A 86 48 86 FC 6B 02 02 01 01 63 09 06 07 2A .*.H..k....c...*
86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B .H..k.d...*.H..k
04 02 15 65 0B 06 09 2B 85 10 86 48 64 02 01 03 ...e...+...Hd...
66 0C 06 0A 2B 06 01 04 01 2A 02 6E 01 02 90 00 f...+....*.n....
Status: No Error
Global Platform version : 2.1.1
Global Platform Secure Channel Protocol: 02 option 15
Java Card version : 2.2
**此時 Java Card 版本為2.2 / GP 為 2.1.1**
2.查看自己的 jdk&&jck 或者 jcdk
現在官方能夠下載到的 jck 包括以下幾個版本
Java Card Classic Development Kit 3.0.5
Java Card Classic Development Kit 3.0.4
Java Card Classic Development Kit 3.0.3
Java Card Classic Development Kit 3.0.2
Java Card Development Kit 2.2.2 (See also Java Card 2.2.2 RMI Client API White Paper)
Java Card 2.2.1 Development Kit (See also Java Card 2.2.1 RMI Client API White Paper)
Java Card 2.2 Development Kit (See also Java Card 2.2.2 RMI Client API White Paper)
Java Card 2.1.2 Development Kit
Java Card 2.1.1 Development Kit
Java Card 2.1 Development Kit
其中 最新3.05是自帶eclipse 插件的 可以自動生成cap包 此版本的對應的 jdk 是1.7
如果使用此版本所帶的插件進行開發其他版本java card 需要進行如下操作
1.下載 java card 對應版本的 jck 和jdk
2.新建目錄A(比如jcdk221)
3.將jck中的 bin+lib+api_export_file 復制到 A\
4.將jdk中的 lib\tools.jar 復制到 A\lib\
5.eclipse->window->prefernces->java card platforms: new->java card SDK path->
ID: JavaCard;
Java Card SDK path: A 的路徑;
OK.
6.java card platforms->java card devices: new -> OK;
7.選擇當前項目 project->java card runtime -> JavaCard (剛才設置的平台ID); OK!
此時 轉換出來的 cap 包就是可以下載到卡片的 cap包了