我无法在字节数组中的 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(这意味着到达文件结尾)。
我在用:
我正在 java 平台上使用智能卡对文件进行数字签名。从语法上讲,我也得到了代码流和其他东西。但我的问题是本机 PKCS11 实现如何与智能卡通信,反之亦然(我不知道这一点)。
我想知道内部流程。我已经用谷歌搜索了很多,但没有得到内部通信流程(我只得到代码)。任何人都可以给我一些链接或参考或一些类图。
我有 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) 我只是在阅读 ISO/IEC 7816 第 4 部分标准。不幸的是,它对我来说有些模糊,我希望我能在这里得到答案。
第一个模糊点是关于Data Objects。定义了数据对象构成Simple-TLV或Ber-TLV类别,并对这些类别进行了一些描述。但是什么是数据对象本身?是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在小程序的不同字段中,我们不考虑它们的任何BER-TLV或Simple-TLV类别!它们只是一系列十六进制数字。
第二个模糊点是关于结构选择部分。它被定义为我们可以通过以下五种不同的方式:
模糊的一点是,据我所知,我唯一可以在卡片上选择的东西是小程序,没有别的。对于小程序,我可以选择默认值(这可以是上述选项的第一种方式,隐式选择)或通过将 SELECT APDU 命令发送到带有 Applet AID 的卡片来选择它(上述任何一种方式都没有提到)。
那么这些结构选择方法是什么呢?
第三个模糊点是EF Structures。定义 EF-s 可以具有以下五种结构:
问题又来了,这些结构是干什么用的?这是数据在内存中存储的方式吗?如果是这样,为什么它们在标准中定义,而它们是关于卡片的内部行为?程序员需要了解它们吗?他/她可以检测/更改他/她的卡使用的EF结构吗?
最后,是否所有符合 ISO 7816-4 的卡都支持上述所有项目(因为我在 ISO 7816-4 中找不到任何提到它们是可选的或其他内容)?
是否所有符合 ISO 7816-4 的卡都需要支持在这部分标准中定义的 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有关。
我怎样才能解码它?有哪些步骤和规则?
我想在作为客户端和服务器的两个小程序之间共享具有不同包 AID 的接口。我看到了链接:[ 0x6f00 errorcasting Javacard Shareable Interface
在上面的链接中说:客户端和服务器必须位于同一个包中。我现在有一个问题。如果客户端有不同的包 AID,是否可以使用服务器功能?非常感谢。
SO JCRE规范提到,如果有另一个applet的新选择apdu,则调用当前选择的applet"deselect"方法.如何从文件系统中选择文件?选择文件会导致调用取消选择当前所选小程序的方法吗?
我想从卡向主机发送一个长响应(1000+ 字节)。读者只有T=0。我有几个问题想知道是否有人知道:
祝一切顺利!
约翰尼
我正在 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# 代码上的错误