目前智能卡cos有两种,一种是采用javacard技术,另一种是native技术。

javacard顾名思义就是使用java语言来实现应用,当然底层还是C语言。用java语言的目的是使得便于实现同一张卡多种应用applet。相对的native是使用C来编写,创建不同的ADF文件来实现不同应用。从个人化流程来说,JavaCard规范推荐统一的通用个人化流程(CPS),在创建安全通道后,通过统一的Store Data命令完成卡片的个人化。而native不同厂家定义完全不同的个人化流程,采用完全不同的个人化指令,纷繁复杂,不便于掌握,也不便于统一。JavaCard对applet进行添加,修改,删除不影响整体稳定,这是native卡难以做到的。

下面介绍javacard与native两种技术的代码框架。

native卡片开机流程:上电初始化之后,处在一个for循环中,读取串口数据,并解析。把从串口收到的数据经APDU解析后,通过INS(还需要检查CLA、P1、P2之类)等来找到该命令所对应的函数执行并返回结果。可以简单点来说就是一个APDU指令对应于卡内的一个功能函数。这种实现把硬件操作与应用糅杂在一起,便于实现,不方便维护。

java卡cos仿造android系统,把跟硬件相关如native卡里的HAL层、通讯层、文件系统、算法、安全等都封装成了java的native方法,把java卡上的智能卡应用开发与底层接口开发分开,便于开发与维护。java卡的底层都是一些寄存器操作,这个需要根据芯片手册来分析,这里就不多介绍,本文主要讲java卡的vm与应用。

java卡vm:

上图很清晰的介绍了off-card跟on-card上jcvm的操作。jcvm简单说就是jvm的一个子集。

接下来介绍一下openjcvm,源码路径:http://download.csdn.net/download/song_ey/5080467

虚拟机文件转换java->class->cap->ijc,openjcvm就是一个进程,运行参数为ijc文件,源码如下:

 if(argc<2){std::cout<<"Usage: "<<argv[0]<<" library1.ijc library2.ijc ... applet.ijc"<<std::endl;//std::cout<<"Usage: "<<argv[0]<<"library1.ijc library2.ijc ... applet.ijc engine.ijc"<<std::endl;exit(1);}

然后把java代码解析放入队列中:

 CardLibList::libList.push_back(buildJavaLang());CardLibList::libList.push_back(buildJNI());//for(i=1;i<argc-2;i++)for(i=1;i<argc-1;i++){int iDataLength = readBin(argv[i],dataBuffer);CardLibList::libList.push_back(buildApplet(dataBuffer,iDataLength));}

下面看一个运行的示例:

 unsigned char* dataBuffer=new unsigned char[10000];int iDataLength = readBin(ijcFileName,dataBuffer);CardApplet* capp = (CardApplet*)buildApplet(dataBuffer,iDataLength);capp->displayInfo();capp->install();capp->process();

可以看出,虚拟机把ijc文件读出后转换成c++类来存放,然后调用里面的方法。

java card语言特点:

1.不支持动态加载 2.不支持安全管理 3.不支持finalization 4.不支持多线程 5.不支持克隆 6.不支持java包中部分访问控制 7.不支持某些关键字,数据类型,核心类

applet的状态切换:

applet应用代码包含install跟process函数,install正常来说就是调用构造函数,process的入参为apdu。

applet开发过程:

jcardsim为java card runtime environment simulator,类似手机模拟器,是针对java card的模拟器,以proxyclass方法,用自己的class文件替换原先库中的class文件,把native方法替换或者屏蔽。从而实现在PC上运行卡上代码。

本文介绍了javacard跟native的cos,当然只是介绍了个框框,总的来说native代码与javacard的底层都是C语言,基本就是一个简单的逻辑,主要是跟寄存器打交道。javacard的applet就是实现install跟process等接口,达到安装运行。另外还讲到的jcvm,后续会再讲解vm。到此uicc的相关知识就到此为止。

uim详解-5(卡上操作系统cos)相关推荐

  1. Git详解之四 服务器上的Git

    Git详解之四 服务器上的Git 服务器上的 Git 到目前为止,你应该已经学会了使用 Git来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git仓库.尽管技术上可以从个人的仓库里推送和拉 ...

  2. 泰坦钩长还是机器人钩长_机器人钩子更远更长!最全教学详解助你上分

    原标题:机器人钩子更远更长!最全教学详解助你上分 9.19机器人得到了一个史诗级的加强,Q技能机械飞爪由之前的1050距离增长到了1150.乍一看,这个加强其实感觉并不是非常强,毕竟靠走位该躲掉的还是 ...

  3. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  4. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  5. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  6. css中float详解,CSS浮动属性Float详解?史上最全Float详解

    我们在学习css样式的时候,都知道css是盒概念,并且每一个盒子都是一个元素,下面我们就对CSS浮动属性Float进行详解,让你彻底了解Float. 一:什么是Float浮动? Float浮动是css ...

  7. linux kvm安装win7,详解在 KVM 上安装 Win7 虚拟机

    详解在 KVM 上安装 Win7 虚拟机 发布时间:2017-04-04 21:09 来源:互联网 当前栏目:web技术类 之前都是在用Linux 虚机,现在有需要用到Win7 虚机,才发现在 KVM ...

  8. scp命令默认传输速度多大_linux中scp命令使用技巧详解(传输速度)linux操作系统 -电脑资料...

    在linux中scp命令与cp命令一样的是复制文件,下面小编来给各位同学介绍一下关于linux中scp命令使用技巧详解,希望此方法对大家会帮助, scp 命令 scp 可以在 2个 linux 主机间 ...

  9. php7 $_files函数,***PHP $_FILES函数详解 + PHP文件上传 move_uploaded_file() 参数的正确写法...

    PHP $_FILES函数详解 在PHP中上传一个文件建一个表单要比ASP中灵活得多.具体的看代码. 如: 复制代码代码如下: 然后upload.php中可以直接用 $_FILES $_POST $_ ...

最新文章

  1. php表单ajax,PHP表单到Ajax类型
  2. Java学习lesson 09
  3. 结对编程项目作业-结对编项目设计文档
  4. 7 php程序的调试方法_PHP程序错误调试方法 让php显示错误提示
  5. 仔细学习CSS(二)
  6. 15.枚举enum.rs
  7. Sublime与远程服务器代码同步工具SFTP
  8. pythonwindows程序开发课程_Windows深入编程全集视频课程(七日成蝶)
  9. 使用自动补全功能- MATLAB
  10. Linux设置环境变量小结:设置永久变量临时变量 全局变量局部变量
  11. 11年写的一篇文章----智能终端安全现状及前景展望
  12. oracle 将钱转换万元单位,oracle 金额单位转换
  13. 七十七、java版商城之直播短视频带货Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
  14. 联发科天玑 9200 旗舰芯片,有哪些亮点和不足
  15. 还不了解Oauth2协议?这篇文章从入门到入土让你了解Oauth2以及Spring Security OAuth2 的使用
  16. 支付宝公钥私钥应用公钥私钥
  17. 烫烫烫屯屯屯 那些事
  18. 下载stm32f4xx标准外设库
  19. PE格式详细讲解2 - 系统篇02
  20. php http 字符串异常,php - 查询字符串http:// 变成http % 3A % 2F % 2 - 编程异常大全

热门文章

  1. Baltur两级燃气燃烧器BTG 3,6 P 50-60Hz
  2. web网站总是出现404 bug?照着以下几个原因排查,不怕修复不了啦
  3. 6044:4115:鸣人和佐助
  4. 基于 Apache Druid 的实时分析平台在爱奇艺的实践
  5. Wampserver部署thinksns
  6. npm报错`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`
  7. NDK开发-Android下摄像头YUV数据获取与H264编码(FFmpeg、x264)总结
  8. ipad分屏_Ipad使用技巧大总结。
  9. 初中经历——走出农村,想象未来
  10. 状态模式(State)-七十二变