标签: smartcard

如何在 JavaCard 中存储大于 128 字节的数据

我无法在字节数组中的 128 以上的索引处写入数据。代码如下。

private void Write1(APDU apdu) throws ISOException
{
    apdu.setIncomingAndReceive();
    byte[] apduBuffer = apdu.getBuffer();
    byte j = (byte)apduBuffer[4];       // Return incoming bytes lets take 160
    Buffer1 = new byte[j];              // initialize a array with size 160
    for (byte i=0; i<j; i++)
        Buffer1[(byte)i] = (byte)apduBuffer[5+i];
}
Run Code Online (Sandbox Code Playgroud)

它给了我错误 6F 00(这意味着到达文件结尾)。

我在用:

  • 智能卡类型 = 联系人卡
  • 使用带有 apdu 的 jcop 的 java 卡 2.2.2

applet byte apdu smartcard javacard

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

本机 PKCS11 实现与智能卡之间的通信

我正在 java 平台上使用智能卡对文件进行数字签名。从语法上讲,我也得到了代码流和其他东西。但我的问题是本机 PKCS11 实现如何与智能卡通信,反之亦然(我不知道这一点)。

我想知道内部流程。我已经用谷歌搜索了很多,但没有得到内部通信流程(我只得到代码)。任何人都可以给我一些链接或参考或一些类图。

java smartcard pkcs#11

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

T=0 JavaCard 的传输错误

我有 4 种不同类型的 JavaCard。出于一个奇怪的目的,我编写了以下小程序,以在接收到每个 APDU 命令时返回整个 APDU 缓冲区:

package bufferReturner;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;

public class BufferReturner extends Applet {

    private BufferReturner() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new BufferReturner().register();

    }

    public void process(APDU arg0) throws ISOException {
        arg0.setOutgoingAndSend((short)0, (short)256);
    }

}
Run Code Online (Sandbox Code Playgroud)

当我向我的卡发送 APDU 命令时,我得到以下结果:

NXP JCOP v2.4.2 r3 卡 - 使用 T=1

OpenSCTool:> OSC.exe -s 00A404000B0102030405060708090101 -s 00000000 -s 00000000020101
Using reader with a card: CASTLES EZ100PU 0
Sending: …
Run Code Online (Sandbox Code Playgroud)

apdu smartcard javacard globalplatform

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

ISO/IEC 7816 数据对象和结构选择和 EF 结构

我只是在阅读 ISO/IEC 7816 第 4 部分标准。不幸的是,它对我来说有些模糊,我希望我能在这里得到答案。

第一个模糊点是关于Data Objects。定义了数据对象构成Simple-TLVBer-TLV类别,并对这些类别进行了一些描述。但是什么是数据对象本身?是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在小程序的不同字段中,我们不考虑它们的任何BER-TLVSimple-TLV类别!它们只是一系列十六进制数字。

第二个模糊点是关于结构选择部分。它被定义为我们可以通过以下五种不同的方式:

  1. 复位后隐式。
  2. 按 DF 名称显式选择
  3. 通过文件标识符选择显式
  4. 显式按路径选择
  5. 通过短 EF 标识符选择显式

模糊的一点是,据我所知,我唯一可以在卡片上选择的东西是小程序,没有别的。对于小程序,我可以选择默认值(这可以是上述选项的第一种方式,隐式选择)或通过将 SELECT APDU 命令发送到带有 Applet AID 的卡片来选择它(上述任何一种方式都没有提到)。

那么这些结构选择方法是什么呢?

第三个模糊点是EF Structures。定义 EF-s 可以具有以下五种结构:

  1. 透明结构
  2. 具有固定大小记录的线性结构
  3. 具有可变大小记录的线性结构
  4. 具有固定大小记录的循环结构(箭头指向最近写入的记录)
  5. TLV结构

问题又来了,这些结构是干什么用的?这是数据在内存中存储的方式吗?如果是这样,为什么它们在标准中定义,而它们是关于卡片的内部行为?程序员需要了解它们吗?他/她可以检测/更改他/她的卡使用的EF结构吗?

最后,是否所有符合 ISO 7816-4 的卡都支持上述所有项目(因为我在 ISO 7816-4 中找不到任何提到它们是可选的或其他内容)?

是否所有符合 ISO 7816-4 的卡都需要支持在这部分标准中定义的 APDU 命令?

smartcard javacard

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

我如何知道智能卡是否已插入?

我需要知道智能卡读卡器中是否存在智能卡。我找不到一个简单的例子来在 C# 中获取它。有人能帮我吗?谢谢

c# smartcard

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

如何解码APDU上终端与芯片之间的通信?

我在 APDU 上的终端和芯片之间有一次通信,我需要对该通信进行解码。

是这样的:

Terminal: 00 B6 02 00 06 00
Chip: 49 55 7B 2C 1F 30 57 35 63 7D 24 7B 60 21
Terminal:00 B5 03 0B 04 02 00
Chip:45 43 3C 3B 4A 31 51 35 53 4B 34 2C 30 21 
Run Code Online (Sandbox Code Playgroud)

据我所知,终端正在向智能卡芯片发送命令,智能卡芯片正在做出响应。所以,我需要知道他们的沟通内容是什么。这与EMV标准和APDU有关。

我怎样才能解码它?有哪些步骤和规则?

terminal apdu smartcard emv smartcard-reader

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

使用 javacard Shareable 类在作为客户端和服务器的两个小程序之间共享具有不同包的接口?

我想在作为客户端和服务器的两个小程序之间共享具有不同包 AID 的接口。我看到了链接:[ 0x6f00 errorcasting Javacard Shareable Interface

在上面的链接中说:客户端和服务器必须位于同一个包中。我现在有一个问题。如果客户端有不同的包 AID,是否可以使用服务器功能?非常感谢。

applet smartcard javacard

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

选择Applet后选择文件会取消选择applet吗?

SO JCRE规范提到,如果有另一个applet的新选择apdu,则调用当前选择的applet"deselect"方法.如何从文件系统中选择文件?选择文件会导致调用取消选择当前所选小程序的方法吗?

smartcard javacard contactless-smartcard

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

Java Card:发送 T=0 的长响应

我想从卡向主机发送一个长响应(1000+ 字节)。读者只有T=0。我有几个问题想知道是否有人知道:

  1. 我的理解是 ExtendedLength 仅适用于 T=1,这是真的吗?
  2. 如果是这样,是否有在 T=0 上发送长响应的最佳实践?
  3. 一种可能的解决方案是按块发送数据,状态码为 61xx。基本上,我会调用 APDU.sendBytesLong,然后用 61xx 抛出异常以指示有更多数据。但是抛出异常来表明有更多数据似乎很奇怪,即使这似乎符合标准

祝一切顺利!

约翰尼

apdu smartcard javacard

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

如何将接口作为参数传递给 C# 方法

我正在 Xamarin android 中做一个项目,我正在按照 java 示例代码通过蓝牙将智能卡读卡器(Acr1255u-j1)连接到 android,并且我找到了一个方法:

mManager.startScan(BluetoothTerminalManager.TERMINAL_TYPE_AMR220_C,
                   new BluetoothTerminalManager.TerminalScanCallback()
{
  @Override public void onScan(final CardTerminal terminal)
  {
    runOnUiThread(new Runnable() 
    {
      @Override public void run()
      {
        mTerminalAdapter.addTerminal(terminal);
      }
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

startscan 方法的第二个参数是一个接口“BluetoothTerminalManager.TerminalScanCallback()”,但是当我尝试将其转换为 c# 时,它显示此错误: c# 代码上的错误

c# smartcard xamarin.android xamarin

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