⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0089.htm

📁 关于java的开发文档
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
    <p align="center"><big><strong>Java Card</strong></big></p>

<div align="right">---(文/吴宗锡)</div>

<TABLE width="90%">
  <TBODY>
  <TR>
    <TD class=page><A name=one>
      <TABLE height=40>
        <TBODY>
        <TR>
          <TD>
          一、前言 
      </TD></TR></TBODY></TABLE></A><BR>
      <P>Java的技术,因为 computing resource的不同,而区分为不同性质的Java平台,如 Enterprise Java、 
      Embedded Java与 Java Card等。若是以Embedded 
      Java来说,因为功能上的要求有限,并且受限於硬体资源大小(如呼叫器),所以在硬体与Java执行环境上必须有所妥协。Java 
      Card也是基於硬体与应用的 求所开发的技术,目的是使得 Java的技术能够在如同smart card晶片般大小的有限资源下执行。所以,目前Java 
      Card可以说是最小的Java平台。 </P><A name=two>
      <TABLE height=40>
        <TBODY>
        <TR>
          <TD>
          二、简介 
      </TD></TR></TBODY></TABLE></A><BR>
      <P>Java Card是Java 平台中最小的 subset,其设定的执行环境为smart card上的晶片或是有严格硬体限制的环境。Java 
      Card的问世,一方面是为了推展Java的应用层次,一方面也是为了将Java平台的特性以及Java Card 的好处带到smart 
      card上,这些好处主要有: </P>
      <UL type=square>
        <LI><B>Platform-Indep endent</B>:使得 Java Card applets (在Java 
        Card上执行的程式)能够在不同卡片的JCAE( Java Card Application Environment)上执行,即透过Java 
        VM 的机制来达到跨平台的能力。 </LI></UL>
      <UL type=square>
        <LI><B>Multi-Applicat ion Capable</B>:在同一个Java Card 中能够存放多个 Java Card 
        applets ,并且也能够透过 download的方式来下载必要的applets 而达到一卡多用途的好处,使得卡的使用能够更有弹性。 
      </LI></UL>
      <UL type=square>
        <LI><B>Compatible with Existing Smart Card Standards</B>: Java Card能与国№ 
        标准ISO 7816( Smart Card标准)以及工业界标准如 Europay/Master Card/Visa (EMV)相容。 
      </LI></UL>
      <P>所以,在未来Java Card不但能够取代今日Smart 
      Card的功能,更能够发展出多样化的应用,如身份识别、医疗资讯记录、电子钱包、门禁管控等,甚至能将许多不同的应用程式集合於一张卡上,使得这些随身的软体能够更小更实用。 
      </P>
      <P>JavaCard现行的版本有2.0与2.1版,其中2.0版是在1997 年底所释出,而2.1 版则是在今年刚释出。 </P><A 
      name=three>
      <TABLE height=40>
        <TBODY>
        <TR>
          <TD>
          三、运作逻辑 
      </TD></TR></TBODY></TABLE></A><BR>
      <P>如图3-1所示Java Card实№运作的模式,主要分为二个部分。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f1.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图3-1、 JavaCard运作模式图</CENTER></TD></TR></TBODY></TABLE>
      <P>第一个部分就是 Java Card这一端,配合CAD(Card Acceptance Device ),也就是图3-1中的Card 
      Reader来传输、读取Card中的资料,并且供给 
      Card所 的电源。而JavaCard本身则可以执行applet程式,使得一些敏感的资料与行为能够安全执行而不受外部程式影响。第二部分则是图3-1右方的 
      Terminal端,负责提供服务程式及操作介面,并透过CAD 与JavaCard沟通。 </P>
      <P>另外,在图3-1中所表示的 APDU(Application Protocol Data Units)即双箭头的部分,则是 
      terminal与Java Card沟通的格式与协定。由terminal 端传送给Java Card 的APDU称为Command 
      APDU,主要适用来下达指令以及传输资料给Java Card。图二即Command APDU的格式。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f2.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图二、 Command APDU格式 </CENTER></TD></TR></TBODY></TABLE>
      <P>其栏位所表示的意义分别为: </P>
      <UL type=circle>
        <LI><B>CLA</B> - Class Byte,用於识别applet </LI></UL>
      <UL type=circle>
        <LI><B>INS</B> - Instruction Byte ,下达给applet之指令 </LI></UL>
      <UL type=circle>
        <LI><B>P1</B> - 第一个指令参数 </LI></UL>
      <UL type=circle>
        <LI><B>P2</B> - 第二个指令参数 </LI></UL>
      <UL type=circle>
        <LI><B>Lc</B> - Data Field之长度 </LI></UL>
      <UL type=circle>
        <LI><B>Data Field</B> - 资料栏位 </LI></UL>
      <UL type=circle>
        <LI><B>Le</B> - 回传资料之长度 </LI></UL>
      <P>例如,terminal要下达两个byte相加的加法指令(INS= 0x01)给applet( CLA=0x80)时, Command 
      APDU的写法可能为: </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f3.gif"> </TD></TR></TBODY></TABLE>
      <P>而当Java Card applet接收到此一指令时则会先判断 CLA byte是否为 0x80,接著再根据 
      terminal端所下达的指令来执行,并将Data Field依指令性质取出两个独立的byte来相加。 </P>
      <P>而由Java Card端回传给terminal端的 APDU则称为 Response APDU,图 3-3则为此APDU之格式。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f4.gif"> </TD></TR></TBODY></TABLE>
      <P>其栏位所表示的意义分别为: </P>
      <UL type=circle>
        <LI><B>Data Field</B> - return之资料栏位 </LI></UL>
      <UL type=circle>
        <LI><B>SW1</B> - 执行状态参数1 </LI></UL>
      <UL type=circle>
        <LI><B>SW2</B> - 执行状态参数2 </LI></UL>
      <P>所以,利用上述的加法为例,Java Card applet执行後所return的值若为 short value(16-bit 
      integer),则 Response APDU的表示法可能为: </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f5.gif"> </TD></TR></TBODY></TABLE>
      <P>其中Data Field为一short integer(以两个bytes表示),而SW1与SW2所表示的意义(0x9000 
      )即"success"或是 "no error"的意思。 </P>
      <P>根据图3-1的运作模式,若以电子钱包为例,我们一开始会在Java Card上 install一个applet 
      ,负责提款、付帐与维护帐目,当我们 要提款时,必须Java Card放入提款机(Terminal)的Card 
      Reader中,透过提款机的服务程式与介面来提出我们 要的款项,并且通知Java Card 上的applet将这笔款项存入Java Card 
      的帐目中。如此我们所持有的Java 
      Card就成为一个行动的卡片钱包。若我们 要消费的话(如搭公车、网路购物等),就可以透过相同的逻辑来扣除款项。所以,在诸如此类的消费行为里,我们就可以透过这种简单的读卡动作来达到消费的目的。不同於一般信用卡的是,我们不但能做小额的消费,也省去了付帐的繁杂手续与携带零钱的麻烦。 
      </P><A name=four>
      <TABLE height=40>
        <TBODY>
        <TR>
          <TD>
          四、Java Card硬体需求 
        </TD></TR></TBODY></TABLE></A><BR>
      <P>Java Card有如一部具体而微的电脑,其硬体的规格主要是在於维护Java Card runtime 
      environment的 求,其最小的规格要求为: </P>
      <UL type=circle>
        <LI><B>512 bytes RAM</B>:主要用於存放程式执行时的 stack、暂存资料以及做为I/O的缓冲区。 </LI></UL>
      <UL type=circle>
        <LI><B>24 KB ROM</B> :主要用於存放系统的程式以及 Runtime Environment,如 JVM、applets、 
        native functions 等。 </LI></UL>
      <UL type=circle>
        <LI><B>8 KB EEPROM</B>:用於储存我们所下载至 Java Card的 applets,并且做为 object 
        heap存放之处。 </LI></UL>
      <UL type=circle>
        <LI><B>8-bit processor</B>: Java Card必须至少支援8位元的处理器。 </LI></UL><A 
name=five>
      <TABLE height=40>
        <TBODY>
        <TR>
          <TD>
          五、Java Card软体架构 
        </TD></TR></TBODY></TABLE></A>
      <P>在上述的硬体架构中,基本上我们可以将Java Card想像为一部PC的缩影,而Java Card的软体架构则具有OS、 native 
      functions 、JCRE(Java Card Runtime Environment)以及架构在此JCRE上的应用程式(Java Card 
      applets),事实上Java Card的软体架构也是与今日的软体架构相仿,图5-1即为Java Card之软体架构。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/jcard_f6.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图5-1 Java Card之软体架构图</CENTER></TD></TR></TBODY></TABLE>
      <P>在此软体架构中,最底层的OS and Native Functions 是负责低阶的处理工作,如同今日的作业系统。而在上面两层Java 
      Card Interpreter与Java Card APIs and Framework就是我们所谓的JCRE,主要负责执行Java Card 
      applets以及提供 applet执行所 要的环境。而 Industry Add-on Classes则是 service provider 
      所提供的classes,使得企业与公司能够提供属於自己的服务程式。 </P>
      <P>Java Card的最上层就是所谓的Java Card applets,就如图5-1所示,一个 Java Card可以执行多个Java 
      Card applets,但是要特别注意,Java Card 的执行环境并无支援Multi-thread,所以一次只能执行一个applet,并且 
      applet与applet之间也有firewall的阻隔。尽管如此,在Java Card的设计之中亦有让不同的 
      applets相互沟通的机制,我们只 要让applet implement javacard.framewor k.Shareable 
      interface就能够分享applet 的 resource。 </P>
      <P>因为受限於体积与 resource,所以 Java Card在执行环境上的支援是相当有限的,表5-1即 Java 
      Card执行环境的支援现况,其他详细内容请参考 references。 </P>
      <TABLE border=1>
        <CAPTION>表5-1 Java Card执行环境之支援</CAPTION>
        <TBODY>
        <TR>
          <TD>支援 </TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -