使 java 卡应用程序类似于 RB 5.0 的资源
resources to make java card application similiar like RB 5.0
我正在制作 java 应用程序,其主要功能是在 java 卡 36k 上写入数据,所以我需要资源,关于 java 卡的教程,诸如此类。?我没有制作 java 卡片应用程序的经验,所以请给我任何有用的资源..
我正在做类似RB 5.0的应用,如果你能给我这个应用的src代码就更好了:)
智能卡规格:
- Global Platform Card Specification(这是v 2.2.0.7,您的卡可能兼容较低版本)
- ISO/IEC 7816(通常您需要第 3 部分和第 4 部分)
Java卡片小程序开发包(含API规格书+RE和VM规格书):
- Java Card Development Kit 3.0.2(下载与您的卡兼容的版本)
Java 与智能卡通信的应用程序库:
- javax.smartcardio(据我所知,它已从较新版本的 Java 开发工具包中删除)
示例 Java 卡片小程序:(一个 HelloWorld,从 here 偷来的):
package helloWorldPackage;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class HelloWorldApplet extends Applet {
private static final byte[] helloWorld = {(byte)'H',(byte)'e',(byte)'l',(byte)'l',(byte)'o',(byte)' ',(byte)'W',(byte)'o',(byte)'r',(byte)'l',(byte)'d',};
private static final byte HW_CLA = (byte)0x80;
private static final byte HW_INS = (byte)0x00;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new HelloWorldApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
byte[] buffer = apdu.getBuffer();
byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
if (CLA != HW_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch ( INS ) {
case HW_INS:
getHelloWorld( apdu );
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
private void getHelloWorld( APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short length = (short) helloWorld.length;
Util.arrayCopyNonAtomic(helloWorld, (short)0, buffer, (short)0, (short) length);
apdu.setOutgoingAndSend((short)0, length);
}
}
与上述小程序一起工作的相关 Java 程序(从 here 窃取并在之后修改):
import java.util.List;
import javax.smartcardio.*;
public class Blog {
public static void main(String[] args) {
try {
// Display the list of terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// Use the first terminal
CardTerminal terminal = terminals.get(0);
// Connect with the card
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
// Send Select Applet command
byte[] aid = {(byte)0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01}; //Replace your Applet AID instead of this AID here.
ResponseAPDU answer = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid));
System.out.println("answer: " + answer.toString());
// Send test command
answer = channel.transmit(new CommandAPDU(0x00, 0x00, 0x00, 0x00));
System.out.println("answer: " + answer.toString());
byte r[] = answer.getData();
for (int i=0; i<r.length; i++)
System.out.print((char)r[i]);
System.out.println();
// Disconnect the card
card.disconnect(false);
} catch(Exception e) {
System.out.println("Ouch: " + e.toString());
}
}
}
您必须将小程序从 .java
转换为 .class
以及从 .class
转换为 .cap
文件。 JCDK 包含为此所需的工具。为了使这个过程更简单,您可以使用 Eclipse IDE 中的 Eclipse-JCDE 插件(对于 Java Card 2.2.2)或 Netbeans IDE Java 卡的插件(默认包含在较新版本中。)
生成 .CAP
文件后,您需要将其上传并安装到卡上。为了实现这个目标,您可以使用名为 GlobalPlatformPro.
的强大的文档齐全的开源工具
安装后您可以使用上面提到的Java程序与您的小程序通信,或者您可以使用另一个名为OpenSC-Tool的开源工具向卡发送APDU命令并接收响应。
我正在制作 java 应用程序,其主要功能是在 java 卡 36k 上写入数据,所以我需要资源,关于 java 卡的教程,诸如此类。?我没有制作 java 卡片应用程序的经验,所以请给我任何有用的资源..
我正在做类似RB 5.0的应用,如果你能给我这个应用的src代码就更好了:)
智能卡规格:
- Global Platform Card Specification(这是v 2.2.0.7,您的卡可能兼容较低版本)
- ISO/IEC 7816(通常您需要第 3 部分和第 4 部分)
Java卡片小程序开发包(含API规格书+RE和VM规格书):
- Java Card Development Kit 3.0.2(下载与您的卡兼容的版本)
Java 与智能卡通信的应用程序库:
- javax.smartcardio(据我所知,它已从较新版本的 Java 开发工具包中删除)
示例 Java 卡片小程序:(一个 HelloWorld,从 here 偷来的):
package helloWorldPackage;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class HelloWorldApplet extends Applet {
private static final byte[] helloWorld = {(byte)'H',(byte)'e',(byte)'l',(byte)'l',(byte)'o',(byte)' ',(byte)'W',(byte)'o',(byte)'r',(byte)'l',(byte)'d',};
private static final byte HW_CLA = (byte)0x80;
private static final byte HW_INS = (byte)0x00;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new HelloWorldApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
byte[] buffer = apdu.getBuffer();
byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
if (CLA != HW_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch ( INS ) {
case HW_INS:
getHelloWorld( apdu );
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
private void getHelloWorld( APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short length = (short) helloWorld.length;
Util.arrayCopyNonAtomic(helloWorld, (short)0, buffer, (short)0, (short) length);
apdu.setOutgoingAndSend((short)0, length);
}
}
与上述小程序一起工作的相关 Java 程序(从 here 窃取并在之后修改):
import java.util.List;
import javax.smartcardio.*;
public class Blog {
public static void main(String[] args) {
try {
// Display the list of terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// Use the first terminal
CardTerminal terminal = terminals.get(0);
// Connect with the card
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
// Send Select Applet command
byte[] aid = {(byte)0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01}; //Replace your Applet AID instead of this AID here.
ResponseAPDU answer = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid));
System.out.println("answer: " + answer.toString());
// Send test command
answer = channel.transmit(new CommandAPDU(0x00, 0x00, 0x00, 0x00));
System.out.println("answer: " + answer.toString());
byte r[] = answer.getData();
for (int i=0; i<r.length; i++)
System.out.print((char)r[i]);
System.out.println();
// Disconnect the card
card.disconnect(false);
} catch(Exception e) {
System.out.println("Ouch: " + e.toString());
}
}
}
您必须将小程序从 .java
转换为 .class
以及从 .class
转换为 .cap
文件。 JCDK 包含为此所需的工具。为了使这个过程更简单,您可以使用 Eclipse IDE 中的 Eclipse-JCDE 插件(对于 Java Card 2.2.2)或 Netbeans IDE Java 卡的插件(默认包含在较新版本中。)
生成 .CAP
文件后,您需要将其上传并安装到卡上。为了实现这个目标,您可以使用名为 GlobalPlatformPro.
安装后您可以使用上面提到的Java程序与您的小程序通信,或者您可以使用另一个名为OpenSC-Tool的开源工具向卡发送APDU命令并接收响应。