﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Terry Zou-随笔分类-JavaCard</title><link>http://www.blogjava.net/ZouYonghui/category/54135.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 14 Mar 2014 19:48:53 GMT</lastBuildDate><pubDate>Fri, 14 Mar 2014 19:48:53 GMT</pubDate><ttl>60</ttl><item><title> JAVA卡介绍</title><link>http://www.blogjava.net/ZouYonghui/archive/2014/03/14/411048.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Fri, 14 Mar 2014 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2014/03/14/411048.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/411048.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2014/03/14/411048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/411048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/411048.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JAVA卡介绍&nbsp;JAVA卡与智能卡&nbsp;&nbsp;&nbsp;&nbsp;什么是&nbsp;JAVA&nbsp;卡呢？JAVA&nbsp;卡是一种可以运行&nbsp;JAVA&nbsp;程序的接触式微处理器智能卡。1996&nbsp;年&nbsp;11&nbsp;月，JAVA&nbsp;卡&nbsp;1.0&nbsp;版本的规范正式发布了。如今&nbsp;JAVA&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/ZouYonghui/archive/2014/03/14/411048.html'>阅读全文</a><img src ="http://www.blogjava.net/ZouYonghui/aggbug/411048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2014-03-14 17:48 <a href="http://www.blogjava.net/ZouYonghui/archive/2014/03/14/411048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的卡内程序</title><link>http://www.blogjava.net/ZouYonghui/archive/2014/01/23/409264.html</link><dc:creator>Terry Zou</dc:creator><author>Terry Zou</author><pubDate>Thu, 23 Jan 2014 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/ZouYonghui/archive/2014/01/23/409264.html</guid><wfw:comment>http://www.blogjava.net/ZouYonghui/comments/409264.html</wfw:comment><comments>http://www.blogjava.net/ZouYonghui/archive/2014/01/23/409264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZouYonghui/comments/commentRss/409264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZouYonghui/services/trackbacks/409264.html</trackback:ping><description><![CDATA[1.new-&gt;Java Card Project<br />2.new-&gt;Java Card Applet Class-&gt;AID Settings<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/zouyonghui/a.jpg" width="516" longdesc="" height="228" /><br />编写卡内程序<br />
<p>public class HelloApplet extends Applet {</p>
<p>&nbsp;public static void install(byte[] bArray, short bOffset, byte bLength) {<br />&nbsp;&nbsp;// GP-compliant JavaCard applet registration<br />&nbsp;&nbsp;new HelloApplet().register(bArray, (short) (bOffset + 1),<br />&nbsp;&nbsp;&nbsp;&nbsp;bArray[bOffset]);<br />&nbsp;}</p>
<p>&nbsp;public void process(APDU apdu) {<br />&nbsp;&nbsp;// Good practice: Return 9000 on SELECT<br />&nbsp;&nbsp;if (selectingApplet()) {<br />&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;byte[] buf = apdu.getBuffer();<br />&nbsp;&nbsp;short offset = ISO7816.OFFSET_CDATA;<br />&nbsp;&nbsp;switch (buf[ISO7816.OFFSET_INS]) {<br />&nbsp;&nbsp;case (byte) 0xE2:<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x01;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x02;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x03;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x04;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x05;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x06;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, (short)(offset-ISO7816.OFFSET_CDATA));<br />&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case (byte) 0xE3:<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x11;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x12;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x13;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x14;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x15;<br />&nbsp;&nbsp;&nbsp;buf[offset++] = 0x16;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA,(short) (offset-ISO7816.OFFSET_CDATA));<br />&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>}</p><br />3.右键项目-&gt;Run Configurations...-&gt;Java Card Application右键选择new-&gt;选择新建的Applet-&gt;package Upload-&gt;aid<br /><br />4.新建卡外项目java project <br />编写卡内程序如下：<br />
<p>public class TestHelloWorld {<br />&nbsp;<br />&nbsp;protected static RFCSMXIO smxio = null;<br />&nbsp;@Before<br />&nbsp;public void setUp() throws Exception {<br />&nbsp;&nbsp;smxio = SMXIOFactory.createJDKSMXIO();<br />&nbsp;}<br />&nbsp;<br />&nbsp;@Test<br />&nbsp;public void test() {<br />&nbsp;&nbsp;try {<br />&nbsp;&nbsp;&nbsp;byte[] aid = ByteUtil.hexToByteArray("5200413120");<br />&nbsp;&nbsp;&nbsp;RFCIOResult result = smxio.selectApplet(aid);<br />&nbsp;&nbsp;&nbsp;int offset = 0;<br />&nbsp;&nbsp;&nbsp;byte[] apdu = new byte[5];<br />&nbsp;&nbsp;&nbsp;apdu[offset] = (byte)0x80;<br />&nbsp;&nbsp;&nbsp;apdu[offset+1] = (byte)0xE2;<br />&nbsp;&nbsp;&nbsp;apdu[offset+2] = 0;<br />&nbsp;&nbsp;&nbsp;apdu[offset+3] = 0;<br />&nbsp;&nbsp;&nbsp;apdu[offset+4] = 0;<br />&nbsp;&nbsp;&nbsp;result = smxio.exchange(apdu);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;System.out.println("result: "+ByteUtil.byteArrayToHex(result.getResult()));<br />&nbsp;&nbsp;&nbsp;boolean res = RFCSMXIOHelper.processCardIOResult(result);<br />&nbsp;&nbsp;&nbsp;byte[] b = result.getResult();<br />&nbsp;&nbsp;&nbsp;if(res){<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ByteUtil.byteArrayToHex(b));<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;} catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;}</p>
<p>}</p>6.安装卡内程序<br />jcop debug-&gt;upload package-&gt;install applet<br />7.运行卡外程序<img src ="http://www.blogjava.net/ZouYonghui/aggbug/409264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZouYonghui/" target="_blank">Terry Zou</a> 2014-01-23 11:38 <a href="http://www.blogjava.net/ZouYonghui/archive/2014/01/23/409264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>