标签: javacard

IntelliJ IDEA 生成主版本为 46 的类文件

我想使用 IntelliJ IDEA 进行 JavaCard 2.2.1 开发。javacard 转换器要求类文件主版本为 46。

所以我的问题是如何将类文件兼容设置为 1.2(这将生成主要版本为 46 的类文件)?

以下是供您参考的类文件版本:

主要次要 Java 平台版本 
45 3 1.0
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 1.5
50 0 1.6

intellij-idea javacard

1
推荐指数
1
解决办法
3226
查看次数

解释Java卡HelloWorld小程序

下面,您会看到一个java卡程序,它在收到APDU Command = 8000000000(其来源)时返回"Hello Word"

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(); …
Run Code Online (Sandbox Code Playgroud)

java javacard

1
推荐指数
1
解决办法
1365
查看次数

制作2张小卡片Java卡进行通信

在同一张智能卡上有2张小卡片,我想要进行通信.

我可以选择一个小程序,然后发送相应的APDU,然后取消选择它并选择另一个等..我想知道是否有可能做到这一点 更正确 与逻辑信道?我的意思是使用一种方法可以让我不为每个APDU命令选择/取消选择每个applet?

先感谢您 :)

applet channel smartcard javacard

1
推荐指数
1
解决办法
415
查看次数

使用javacardx.framework.math.BigNumber时,applet无法安装

我在javacard applet中声明BigNumber数据类型时遇到了问题.如果我只是评论声明,applet正确加载到模拟器中.问题的确切原因是加载import.cap文件时(jcshell:错误代码:6a80(数据错误))

java卡套件2.2.2使用

  import javacard.framework.APDU;
  import javacard.framework.Applet;
  import javacard.framework.ISO7816;
  import javacard.framework.ISOException;
  import javacard.framework.JCSystem;
  import javacardx.framework.math.BigNumber;

 public class LargeBal extends Applet {

 // CLA byte
public static final byte BANK_CLA = (byte) 0x80;

// INS byte
public static final byte INS_GET_BALANCE = 0X02;
public static final byte INS_CREDIT = 0X04;
public static final byte INS_DEBIT = 0X06;

/**
 * SW bytes for Arithmetic exception
 */
final static short INVALID_NUMBER_FORMAT = 0x6308;

/**
 * Initial account balance
 */
final static byte[] INITIAL_ACCOUNT_BALANCE …
Run Code Online (Sandbox Code Playgroud)

applet smartcard javacard jcop

1
推荐指数
1
解决办法
354
查看次数

有没有替代GlobalPlatform Shell for Java Cards的替代方案?

我知道GP Shell是一个测试Java卡I/O的工具.

但是,使用起来非常麻烦.

有没有GP Shell的替代品,不需要编写脚本?

javacard

1
推荐指数
1
解决办法
1284
查看次数

APDU在方法上抛出6F00

我试图从传入的智能卡APDU读取数据并返回相同的传入消息,同时还将ASCII字"响应"附加到消息的前面.我正在获得一个6F00地位.我该如何修复代码?

我的代码:

private void repeat(APDU apdu) {
    byte[] buffer = apdu.getBuffer();
    apdu.setIncomingAndReceive();
    byte[] incomingMsg = getData(buffer);
    if ((short) incomingMsg.length != (short) 0) {
        apdu.setOutgoing();

        // Send back the "respond " + "<incoming message" back
        byte[] respMsg = {0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x20};
        byte[] outgoingMsg = new byte[(short) (incomingMsg.length + respMsg.length)];
        ArrayLogic.arrayCopyRepack(respMsg, (short) 0, (short) respMsg.length, outgoingMsg, (short) 0);
        ArrayLogic.arrayCopyRepack(incomingMsg, (short) 0, (short) incomingMsg.length, outgoingMsg, (short) respMsg.length);
        buffer = outgoingMsg;
        apdu.setOutgoingAndSend((short) 0, (short) outgoingMsg.length);
    }
} …
Run Code Online (Sandbox Code Playgroud)

apdu smartcard javacard

1
推荐指数
1
解决办法
3571
查看次数

Javacard通过Java代码获取已安装applet的applet

我有一个javacard,它安装了2个小程序.现在我想从两者中选择一个.目前我的工作方式是,我提供applet的cap文件,我从中得到它的AID.但我发现这种方法并不令人满意.所以

  1. 是否有一种方法可以在没有封面文件的情况下获得安装在Java卡中的applet的AID?
  2. 有没有办法选择没有AID的applet?我的意思是,有一种方法可以在重置后自动选择applet吗?
  3. 对此有任何其他想法或见解吗?

java javacard

1
推荐指数
1
解决办法
1065
查看次数

APDU命令中的负数

我正在编写Java Applet.我需要RSAPrivateCrtKey使用APDU Command 上传预生成到applet.

在我的电脑里,我正在生成密钥.接下来我将此密钥序列化为privateKeyBuffer:

keyPair = new KeyPair(KeyPair.ALG_RSA_CRT, KeyBuilder.LENGTH_RSA_512);
keyPair.genKeyPair();
rsaPrivateKey = (RSAPrivateCrtKey) keyPair.getPrivate();

byte[] privateKeyBuffer = new byte[165];

short lengthDP1 = rsaPrivateKey.getDP1(privateKeyBuffer, 0);
offset += lengthDP1;

short lengthDQ1 = rsaPrivateKey.getDQ1(privateKeyBuffer, offset);
offset += lengthDQ1;

short lengthP = rsaPrivateKey.getP(privateKeyBuffer, offset);
offset += lengthP;

short lengthQ = rsaPrivateKey.getQ(privateKeyBuffer, offset);
offset += lengthQ;

short lengthPQ = rsaPrivateKey.getPQ(privateKeyBuffer, offset);
Run Code Online (Sandbox Code Playgroud)

生成缓冲区后,我应该将每个数组元素转换为十六进制,然后使用APDU发送,最后在applet中恢复我的私钥,但是privateKeyBuffer我们有负数:

37,65,-96,-110,38,6,-2,73,-37,28,120,-90... (etc)
Run Code Online (Sandbox Code Playgroud)

我应该如何将它们转换为十六进制并保持APDU正确(因为我知道只允许正数)或者可能有另一种方法将密钥推送到JavaCard?

有任何想法吗?

java encryption applet rsa javacard

1
推荐指数
1
解决办法
227
查看次数

如何选择使用安全通道协议?

一些智能卡支持SCP 01和SCP02是什么意思?以及如何在这两者之间做出选择?它是在安全域中预定义还是有一些命令可以选择一个或其他选择?

smartcard javacard

1
推荐指数
2
解决办法
5118
查看次数

验证Javacard上的applet和SAM上的applet(安全访问模块)

我在我的Java卡和我的SAM中的另一个applet中编写了一个applet.我想通过发送每一侧创建的随机数来创建相互身份验证.读者的模型是:

c:\>gp.exe  -all -d
# Detected readers from SunPCSC
[*] ACS ACR1281 1S Dual Reader PICC 0
[*] ACS ACR1281 1S Dual Reader SAM 0
Run Code Online (Sandbox Code Playgroud)

我在SAM上选择applet,创建随机数并发送出去.然后我选择Java卡上的applet创建随机SAM的字符串和新的随机创建卡并发送混合随机.

所以我应该再次选择SAM上的applet来检查随机,但由于我的randoms处于瞬态Clear_ON_RESET内存中,它们就消失了.

我需要瞬态CLEAR_ON_RESETMemory中的随机数.我用它gp.exe来发送APDU.

有什么方法可以选择SAM和卡吗?我想应该有办法让他们两个.

javacard

1
推荐指数
1
解决办法
201
查看次数

标签 统计

javacard ×10

smartcard ×4

applet ×3

java ×3

apdu ×1

channel ×1

encryption ×1

intellij-idea ×1

jcop ×1

rsa ×1