java - 在 cref 上导入 javacard 小程序

标签 java javacard sim-toolkit

我在 cref 上安装 javacard applet 时遇到问题。

我从 oracle javacard 示例中获取简单的示例 - HelloWorld 并添加两行额外的行 - import sim.toolkit.*;和私有(private) ToolkitRegistry reg;。 这是小程序的代码

package helloworld;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
import sim.toolkit.*;

public class Hello extends Applet {
    private byte[] echoBytes;
    private static final short LENGTH_ECHO_BYTES = 256;
    private ToolkitRegistry  reg;

    /**
     * Only this class's install method should create the applet object.
     */
    protected Hello() {
        echoBytes = new byte[LENGTH_ECHO_BYTES];
        register();
    }

    /**
     * Installs this applet.
     *
     * @param bArray
     *            the array containing installation parameters
     * @param bOffset
     *            the starting offset in bArray
     * @param bLength
     *            the length in bytes of the parameter data in bArray
     */
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new Hello();
    }

    /**
     * Processes an incoming APDU.
     *
     * @see APDU
     * @param apdu
     *            the incoming APDU
     * @exception ISOException
     *                with the response bytes per ISO 7816-4
     */

    public void process(APDU apdu) {
        byte buffer[] = apdu.getBuffer();

        // check SELECT APDU command
        if ((buffer[ISO7816.OFFSET_CLA] == 0) &&
                (buffer[ISO7816.OFFSET_INS] == (byte) (0xA4))) {
            return;
        }

        short bytesRead = apdu.setIncomingAndReceive();
        short echoOffset = (short) 0;

        while (bytesRead > 0) {
            Util.arrayCopyNonAtomic(buffer, ISO7816.OFFSET_CDATA, echoBytes, echoOffset, bytesRead);
            echoOffset += bytesRead;
            bytesRead = apdu.receiveBytes(ISO7816.OFFSET_CDATA);
        }

        apdu.setOutgoing();
        apdu.setOutgoingLength((short) (echoOffset + 5));

        // echo header
        apdu.sendBytes((short) 0, (short) 5);
        // echo data
        apdu.sendBytesLong(echoBytes, (short) 0, echoOffset);
    }
}

在添加这些行之前,我的小程序安装在 cref 上没有任何问题 (SW1 SW2 90 00),但在这些编辑之后,我在安装中遇到了问题 - SW1 SW2 0x6438,这意味着找不到导入的包。

我做错了什么?在编译期间我使用了 sim.toolkit jar 文件,在生成 .cap 文件期间使用了 sim 工具包中的导出文件。

最佳答案

据我所知,Java Card Development Kit 附带的模拟器不支持 SIM Toolkit 功能。

您可能想使用例如Gemalto Developer Suite .

祝你好运!

关于java - 在 cref 上导入 javacard 小程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095663/

相关文章:

java - 使用 Scale 调整大小时,具有透明背景的 PNG 变为黑色

java - 是否有 Google App Engine 等效项可以让您将 SOAP 与 Java 结合使用并且是免费的,或者是 GAE 支持的 SOAP 库吗?

smartcard - 通过非接触式或 NFC 的 ATS(选择应答)与通过接触卡的 ATR(重置应答)之间的区别

smartcard - 如何在 0x6310 状态后从 JavaCard 获取更多数据?

Java 图像处理库?

java - 在HQL中运行Oracle SQL存储过程

javacard - 如何检测传入命令的接口(interface)?

javacard - 使用 SW 6A88 在 Java 卡上安装 SIM 工具包小程序失败

android - 我可以让我的应用程序与 Simtool Kit 对话以确定当前的资费计划和 SIM 中的余额吗?