vykern
2015-10-14 04:03
采纳率: 100%
浏览 2.4k
已采纳

使用JDKit 3.0.5u1 生成的cap包 在下载到卡片过程出现错误 6438

如题, 在使用官方给的 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条回答 默认 最新

  • vykern 2016-03-11 05:08
    已采纳

    问题已解决.

    现将问题原因和解决过程与大家分享

    问题原因: 版本号不支持. 
        此处版本号包括 
        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包了
    
    点赞 打赏 评论

相关推荐 更多相似问题