好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

一种在cap文件中替换函数的方法、装置及系统的制作方法.docx

6页
  • 卖家[上传人]:ting****789
  • 文档编号:308759904
  • 上传时间:2022-06-12
  • 文档格式:DOCX
  • 文档大小:21.83KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 一种在cap文件中替换函数的方法、装置及系统的制作方法专利名称:一种在cap文件中替换函数的方法、装置及系统的制作方法技术领域:本发明涉及智能卡领域,尤其涉及Java Card应用中一种在CAP文件中替换函数 的方法、装置及系统背景技术:智能卡的存储器体系主要是由读写存储器(RAM)、只读存储器(ROM)以及可擦写 编程存储器(EEPR0M)组成,智能卡所有的程序内容都保存在非易失性的存储器中Java Card是可以运行Java程序代码的智能卡考虑智能卡的存储空间有限,不能直接存储Java源代码或class类文件,在将 Java Card类导入一个Java Card设备之前,需要通过转换装置将类文件转换为标准的转化 小应用程序(Converted Applet, CAP)文件,该CAP文件包含了 Java程序包中的所有类文 件在Java编程语言中,方法是实现功能的最小单位,为了叙述方便,这里统一将方法称为 函数对于Java源代码中的每个函数,转换为CAP文件后,都是由方法头和多个操作码组 成,其中,每个操作码用一个字节表示,能够实现特定的功能现有技术中,在将CAP文件导入Java Card设备后,对于存储在ROM中的CAP文 件,如果CAP文件中的某个Java函数出现错误,或者是需要修改某个函数以实现新的功能 时,不能直接改写CAP文件的操作码,可能需要更换新的Java Card设备。

      同样,对于存储 在EEPR0M中的CAP文件,理论上可以改写操作码,但是实际应用中,由于CAP文件在下载到 Java Card设备上时,每个函数占用的存储空间已经确定,可能使得存放新函数操作码的存 储空间不足,再者,在下载CAP文件时,可能已经经过链接并包含用户数据,CAP文件内容各 组件之间的关系已经确定,如果直接改写该CAP文件中的函数,可能会引起错误综上所述,需要寻求一种替换已下载到Java Card设备上的函数的方法,以克服不 能改写Java Card设备存储的CAP文件中的函数,或者改写时容易出现错误的缺陷发明内容本发明提供一种在CAP文件中替换函数的方法、装置及系统,用以在不影响CAP文 件其它功能以及用户数据的情况下,对存储在Java Card设备上的CAP文件中的函数进行替换本发明实施例提供的具体技术方案如下一种在CAP文件中替换函数的方法,包括接收卡片接受设备发送的第一应用程序协议数据单元(APDU)命令;在本地预存的CAP文件中确定需更改的第一函数,并确定该第一函数归属的类;确定所述类中定义的用于放置新生成函数的存储位置,并根据所述第一 APDU命 令生成相应的用于替换第一函数的第二函数,以及将第二函数存入所述存储位置;接收卡片接受设备发送的第二 APDU命令,根据该第二 APDU命令,从所述存储位置 读取第二函数,对所述CAP文件中的第一函数进行替换。

      一种在CAP文件中替换函数的装置,包括第一处理单元,用于接收卡片接受设备发送的第一应用程序协议数据单元(APDU) 命令;第二处理单元,用于在本地预存的CAP文件中确定需更改的第一函数,并确定该 第一函数归属的类;第三处理单元,用于确定所述类中定义的用于放置新生成函数的存储位置,并根 据所述第一 APDU命令生成相应的用于替换第一函数的第二函数,以及将第二函数存入所 述存储位置;第四处理单元,用于接收卡片接受设备发送的第二 APDU命令,根据该第二 APDU命 令,从所述存储位置读取第二函数,对所述CAP文件中的第一函数进行替换一种在CAP文件中替换函数的系统,包括卡片接受设备,用于向Java Card设备发送第一 APDU命令以及第二 APDU命令;Java Card设备,用于接收卡片接受设备发送的第一应用程序协议数据单元 (APDU)命令,在本地预存的CAP文件中确定需更改的第一函数,确定该第一函数归属的类, 以及确定所述类中定义的用于放置新生成函数的存储位置,根据所述第一 APDU命令生成 相应的用于替换第一函数的第二函数,以及将第二函数存入所述存储位置,并接收卡片接 受设备发送的第二 APDU命令,根据该第二 APDU命令,从所述存储位置读取第二函数,对所 述CAP文件中的第一函数进行替换。

      基于上述技术方案,本发明实施例中,通过在源程序中添加方法数组生成函数,将 新函数(第二函数)对应的数据文件保存到方法数组中,再采用该方法数组替换CAP文件 中存在的第一函数,对第二函数的保存是通过创建方法数组来实现的,不需要预留存储空 间,只需在源程序中对预期会改变的函数添加方法数组生成函数,即可根据APDU命令替换 CAP文件中的函数,达到修正错误或实现新功能的目的,同时,对CAP文件中的其他功能和 数据不会造成影响,可以方便快捷地对CAP文件中的函数进行替换,提高了效率,节约了成 本图1为本发明实施例中在CAP文件中替换函数的系统架构图;图2为本发明实施例中在CAP文件中替换函数的装置结构图;图3为本发明实施例中在CAP文件中替换函数的详细流程图具体实施例方式为了克服Java Card存储方式导致的无法修改CAP文件中的函数这一技术缺陷, 本发明实施例提供了一种在CAP文件中替换函数的方法,能够在不影响Java Card已有的 功能和数据的情况下,对Java Card上存储的CAP文件中的函数进行替换,提高效率,节约 成本该方法为接收卡片接受设备发送的第一应用程序协议数据单元(APDU)命令,在本 地预存的CAP文件中确定需更改的第一函数,并确定该第一函数归属的类,确定上述类中 定义的用于放置新生成函数的存储位置,并根据上述第一 APDU命令生成相应的用于替换 第一函数的第二函数,以及将第二函数存入上述存储位置,并接收卡片接受设备发送的第5二 APDU命令,根据该第二 APDU命令,从上述存储位置读取第二函数,对上述CAP文件中的第一函数进行替换。

      下面结合附图对本发明优选的实施方式进行详细说明参阅附图1所示,本发明实施例中,在CAP文件中替换函数的系统主要包括卡片接 受设备10和Java Card设备11,其中,卡片接受设备10,用于向Java Card设备11发送第一 APDU命令以及第二 APDU命 令;Java Card设备11,用于接收卡片接受设备10发送的第一应用程序协议数据单元 (APDU)命令,在本地预存的CAP文件中确定需更改的第一函数,并确定该第一函数归属的 类,确定该类中定义的用于放置新生成函数的存储位置,并根据上述第一 APDU命令生成相 应的用于替换第一函数的第二函数,以及将第二函数存入上述存储位置,并接收卡片接受 设备发送的第二 APDU命令,根据该第二 APDU命令,从上述存储位置读取第二函数,对上述 CAP文件中的第一函数进行替换参阅附图2所示,本发明实施例中,Java Card设备11主要包括以下处理单元第一处理单元111,用于接收卡片接受设备发送的第一应用程序协议数据单元 (APDU)命令;第二处理单元112,用于在本地预存的CAP文件中确定需更改的第一函数,并确定 该第一函数归属的类;第三处理单元113,用于确定所述类中定义的用于放置新生成函数的存储位置,并 根据所述第一 APDU命令生成相应的用于替换第一函数的第二函数,以及将第二函数存入 所述存储位置;第四处理单元114,用于接收卡片接受设备发送的第二 APDU命令,根据该第二 APDU命令,从所述存储位置读取第二函数,对所述CAP文件中的第一函数进行替换。

      为了实现上述技术方案,本发明实施例中,首先需要在操作系统中新增本地应用 程序编程接口,该本地应用程序编程接口用于实现新函数调用^jftjSfflfMj^lSfM^n (native Application Program Interface,native API) 是指采用非Java语言实现的本地函数,native API能够代替部分Java源代码,以达到提 高效率或实现特殊功能的目的这些nativeAPI可以通过CAP文件中自定义的特殊标记来 区分,并在运行调用相应的native API例如,CAP文件方法头中的第一个字节是0X20,表示该方法头对应的函数属于 native API在Java Card操作系统中新增的native API能够被所有的Java源程序调用本发明实施例中,新增的native API的参数至少包括一个byte数据类型的数组 的引用在Java Card操作系统中新增的native API的参考格式如下所示,public static void callMethod(byte[]bArray, short offset), native API ( MWi callMethod)实王见 的功能为从输入参数byte数据类型数组bArray中,由short数据类型的参数offset所确 定的偏移位置开始,进行Java函数的调用。

      其次,需要在源程序中定义方法数组生成函数,该方法数组生成函数用于生成方 法数组该方法数组用于保存第二函数转换为CAP文件后对应的方法头和操作码,该第二 函数用于替换Java Card设备上存储的CAP文件中的第一函数在需要下载到java Card设备的Java源程序中,增加方法数组生成函数,该方法 数组生成函数的功能为根据输入数据生成方法数组,将该方法数组作为上述新增native API的输入,执行native API调用本发明实施例中,方法数组生成函数的参数至少包括一个目的byte数据类型数 组的引用,一个源byte数据类型数组的应用,源byte数据类型数组内数据的起始地址,以 及从源byte数据类型数组的起始地址开始的数据长度在Java源程序中增加方法数组生成函数的参考格式如下所示,public void saveMethod (byte [] destArray, byte [] srcArray, short offset,short length),该方法数 组生成函数实现的功能为将输入参数的源数组srcArray中,以offset字节的偏移量所确 定的位置作为起始位置,截取length字节长度的数据,生成新的byte数据类型的方法数 组。

      也就是,将源数组中指定的数据起始地址开始的指定长度的数据复制到上述方法数组 中,并使得destArray指向该方法数组的存储位置在Java Card应用中,应用程序协议数据单元(Application Protocol Data Unit,APDU)命令用于卡片接受设备10和Java Card设备11之间进行通信Java Card接 收任何卡片接受设备10发送的APDU命令,并传送到相应的应用程序中,应用程序处理APDU 命令并返回响应APDU,APDU遵守IS0/IEC7816-3和7816-4APDU命令包括命令头(Header) 和命令体(Body),其中,命令头由五个字节组成,第1个字节(CLA字节)用于识别指令的一 个特定应用程序类,第2个字节(INS字节)用于指示CLA字节中标示的某个指令类中的一 个特定指令,该特定指令用于完成特定的功能,第5个字节用于存放APDU命令体的总长度, 第3、4字节可以由用户根据需要自行定义,本发明实施例中,第3、4字节可用于表示命令体 中存放数据文件的位置和长度,APDU命令体部分用于存放数据文件(如,某函数对应数据 文件)本发明实施例中,需要找到Java Card设备上的CAP文件在被下载到JavaCard设 备之前,保存在Java Card设备之外(如,计算机上)的Java源文件,在该Java源文件中, 直接删除原来的第一函数,并且在原来第一函数的位置加入第二函数,再将重新编辑后的 Java源文件转换为新的CAP文件,从该新的CAP文件中截取出第二函数对应的数据文件, 并将该第二函数对应的数据文件发送给卡片接受设备10,以将第二函数的数据文件保存在 APDU命令体中,上述第二函数。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.