📄 0089.htm
字号:
<TD>不支援 </TD></TR>
<TR>
<TD>boolean、byte、 short、int </TD>
<TD>float、double、 long、char、 Strings </TD></TR>
<TR>
<TD>Dynamic Object Creation </TD>
<TD>Dynamic Class Loading </TD></TR>
<TR>
<TD>Arrays </TD>
<TD>Security Manager </TD></TR>
<TR>
<TD>Virtual mehtods </TD>
<TD>Garbage Collectioin & Finalization </TD></TR>
<TR>
<TD>Dynamic allocation </TD>
<TD>Threads </TD></TR>
<TR>
<TD>Packages </TD>
<TD>Cloning </TD></TR>
<TR>
<TD>Exceptions </TD>
<TD>Multi-dimentional arrays </TD></TR>
<TR>
<TD>Interfaces </TD>
<TD> </TD></TR></TBODY></TABLE><A name=six>
<TABLE height=40>
<TBODY>
<TR>
<TD>
六、Java Ring
</TD></TR></TBODY></TABLE></A>
<P>Java Ring又名 Java-Powered iButton,是Dallas Semiconductor公司的产品,事实上 Java
Ring只是Java Card的另外一种型态,Dallas公司将它制作成为钮扣的形状,进而镶嵌在戒指之上,成为一个Java Ring。 </P>
<P>因为Java Ring是沿袭Java Card的规格,所以在软体的架构上是相同的。而 Java Ring在Java
Card的原有的硬体架构下加强了其原有的结构,并且发展出与Java Card不同的应用层面。详细的资料请参考[3] 。
</P><A name=seven>
<TABLE height=40>
<TBODY>
<TR>
<TD>
七、Java Card API
</TD></TR></TBODY></TABLE></A>
<P>Java Card的2.1版总共分为四个 packages,而其内容与重要的物件分述如下: </P>
<UL type=circle>
<LI><B>javacard.lang package</B>:提供 Java language重要的classes,如
Object物件,因为所有的Java物件皆继承其下。
<UL>
<LI>Object class - root of class hierarchy </LI></UL>
<UL>
<LI>Throwable class - 为所有 error及exception 的superclass,这亦表示Java
Card支援exception </LI></UL></LI></UL>
<UL type=circle>
<LI><B>javacard.frame work package</B> :是Java Card API 主要的core
package,提供了实做Java Card applet基本的物件与工具。
<UL>
<LI>IOS7816 abstract interface - 提供了ISO7816所使用的常数值 </LI></UL>
<UL>
<LI>PIN abstract interface - 使其 subclass能透过此一介面能够做check PIN number及验证
PIN是否为validate 等功能 </LI></UL>
<UL>
<LI>Shareable abstract interface -
使得不同的applets能够透过implement此介面来达到互相沟通的功能 </LI></UL>
<UL>
<LI>AID class - AID(Application Identifier)是用来唯一表示Java Card
applet的number,使得JCRE能够透过一个AID table来识别或选择我们所要执行的applet </LI></UL>
<UL>
<LI>APDU class - 是属於 JCRE的物件,是藉由maintain一个 byte array buffer 来接收与传送
terminal端的指令与回传applet执行的结果与状态的标准格式 </LI></UL>
<UL>
<LI>Applet class - 每一个 Java Card applet 都必须继承在此 class之下。其中在
implement时要特别注意几个methods,如select、 deselect是当 terminal端跟据 applet的AID下达
select或deselect 此applet的指令时,由JCRE来启动的 methods。而 install与register
则是applet下载至 Java Card安装并向 JCRE注册之methods 。等到applet安装注册完成,并且被
terminal所select 时,所有下达的 APDU command接会交由applet的 process
method来处理并负责回传结果 </LI></UL>
<UL>
<LI>JCSystem class - 负责管理 applet与Java Card 的系统资源,如AID 与Transaction的管理
</LI></UL>
<UL>
<LI>OwnerPIN class - 继承自PIN interface,负责 maintain卡片持有人的PIN
number,并提供相关check与 update等methods </LI></UL>
<UL>
<LI>Util class - 是一个提供常用工具的class ,如byte array copy与compare等
</LI></UL></LI></UL>
<UL type=circle>
<LI><B>javacard.secur ity package</B>:提供安全机制与物件的package,其中几个重要的
interface与class 如下:
<UL>
<LI>Key abstract interface - 是 DESKey、 PrivateKey、 PublicKey等
interface的共同介面 </LI></UL>
<UL>
<LI>KeyBuilde r class - 是一个 create各种安全的 key的factory </LI></UL>
<UL>
<LI>MessageDi gest class - 是一个可以将message做数位签章之object </LI></UL></LI></UL>
<UL type=circle>
<LI><B>javacardx.cryp to
package</B>:其中包含了关於加密与安全的物件,并且有美国的出口限制,而此package 仅包含了一个 interface与一个
abstract class:
<UL>
<LI>Cipher abstract class - 使得在Java Card中的资讯得以加密保护 </LI></UL></LI></UL><A
name=eight>
<TABLE height=40>
<TBODY>
<TR>
<TD>
八、范例
</TD></TR></TBODY></TABLE><BR><B>程式8-1 HelloWorld applet</B>
<P align=center>
<TABLE width="70%">
<TBODY>
<TR>
<TD class=detail><PRE>
//一applet必须要属於一package
package samples.HelloWorld;
import javacard.framework.*; //imoprt必要的package
public class HelloWorld extends Applet
{
//此echoBytes array为"HelloWorld"的16进位表示法
private static final byte echoBytes[] = {
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64};
//applet constructor
protected HelloWorld(APDU apdu)
{ //在applet initiate时向JCRE注册
register();
}
/*当applet下载至Java Card时,则会启动install method来安装applet,并传入
applet install所要的参数*/
public static void install( byte[] bArray, short bOffset, byte bLength )
{ //initiate
HelloWorld applets new HelloWorld(null);
}
public void process(APDU apdu) throws ISOException
{ //处理terminal端的APDU指令
byte buffer[] = apdu.getBuffer();
//取得APDU之buffer
//将echoBytes,及"HelloWorld"byte自串copy至APDU的buffer
Util.arrayCopyNonAtomic(echoBytes, (short)0, buffer,
(short)0, (short)echoBytes.length);
//将APDU buffer的资料设为"写出",并直接传送出去
apdu.setOutgoingAndSend((short)0, (short)echoBytes.length);
}
}
</PRE></TD></TR></TBODY></TABLE></P><PRE></PRE>
<P>以上是一个 HelloWorld的例子(程式8-1)用来介绍基本的Java Card applet的implement 方式。而此
HelloWorld范例程式的执行,是预设由terminal端传来 Command
APDU後,此applet并不处理此APDU,而是直接将"HelloWorld"的讯息以APDU的方式直接回传给 terminal端。 </P><A
name=nine>
<TABLE height=40>
<TBODY>
<TR>
<TD>
九、参考资料
</TD></TR></TBODY></TABLE></A>
<DL>
<DT>
<DD><A name=1>[1]</A> "Java Card 2.0 Reference Implementation," <A
href="../../www.javasoft.com/default.htm">htt p://www.javasoft. com</A>.
<DD><A name=2>[2]</A> "Java Card 2.1 Reference Implementation," <A
href="../../www.javasoft.com/default.htm">htt p://www.javasoft. com</A>
<DD><A name=3>[3]</A> <A
href="../../ibutton.com.tw/default.htm">http://ibutton.com.tw/</A>
</DD></DL></TD></TR></TBODY></TABLE>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -