- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过 HID OMNIKEY 5427 CK 通过 APDUs 命令来操作 MIFARE 卡,即。 Ultralight C 卡,在 Windows 10 x64 操作系统环境中使用 WinSCard.dll。 (我在 NXP NDA 下,可以完全访问他们的文件)
我试图在网上查找信息好几天了。除了 2 页小册子外,似乎没有针对此模型的已发布文档。
像 GetUID (FFCA000000) 这样的简单命令就可以了,我可以取回实际的卡 UID。
但是对于“使用卡进行身份验证”,来自 HID 5421 模型的引用文件说我应该从 OpenGenericSession (FFA0000703010001) 开始,我尝试过,但读者总是回复 6D00h(错误)
我尝试直接发送 Authentication 命令'1Ah+00h' (FFA00005080100F30000641A0000) 阅读器也总是回复错误代码。
我使用过 HID 5421 型号,而且非常简单,不知道为什么这个 5427 与其兄弟型号不同。
是的,我联系了 HID 支持。没运气。我无法从他们那里获得有用的信息。
如果有人有想法或有5427软件开发指南,请帮忙。我现在拉头发快一个星期了。
最佳答案
下面是使用 Omnikey 5321/6321 通过通用 session 与 Ultralight-C 通信的概念验证 java 代码:
private static final byte AF = (byte)0xAF;
protected static final byte[] PREFIX = new byte[] { 0x01, 0x00, (byte) 0xF3, 0x00, 0x00, 0x64 };
protected final CardChannel channel;
protected void openGenericSession() throws CardException {
System.out.println("OPEN GENERIC SESSION");
transmitAssert9000(new CommandAPDU(0xFF, 0xA0, 0x00, 0x07, new byte[] { 0x01, 0x00, 0x01}));
}
protected byte[] transmitRaw(byte[] data) throws CardException {
System.out.println(" => " + toHex(data));
byte[] ret = transmitAssert9000(new CommandAPDU(0xFF, 0xA0, 0x00, 0x05, ArrayUtils.addAll(PREFIX, data), 256));
if(ret.length<2) {
throw new RuntimeException();
}
if((ret[0]==0x00)&&(ret[1]==0x00)) {
// Success
ret = Arrays.copyOfRange(ret, 2, ret.length);
System.out.println(" <= " + toHex(ret));
return ret;
}
if((ret[0]==0x08)&&(ret[1]==0x04)&&(ret.length==3)) {
// ACK/NAK
switch(ret[2]) {
case 0x0A:
System.out.println(" <= ACK");
return ArrayUtils.EMPTY_BYTE_ARRAY;
default:
// Buyer beware: very simplified
System.out.println(" <= NAK");
throw new RuntimeException("NAK");
}
}
ret = Arrays.copyOfRange(ret, 2, ret.length);
System.out.println(" <= " + toHex(ret));
return ret;
}
protected static byte[] assert9000(ResponseAPDU transmit) {
if(transmit.getSW()!=0x9000) {
throw new RuntimeException("Unexpected response code");
}
return transmit.getData();
}
protected byte[] transmitAssert9000(CommandAPDU commandAPDU) throws CardException {
return assert9000(transmit(commandAPDU));
}
protected ResponseAPDU transmit(CommandAPDU commandAPDU) throws CardException {
System.out.println(" -> " + toHex(commandAPDU.getBytes()));
ResponseAPDU responseAPDU = channel.transmit(commandAPDU);
System.out.println(" <- " + toHex(responseAPDU.getBytes()));
return responseAPDU;
}
public byte[] read(int offset) throws CardException {
System.out.println("READ");
return transmitRaw(new byte[] {0x30, (byte)offset});
}
OPEN GENERIC SESSION
-> FFA0000703010001
<- 9000
AUTHENTICATE
=> 1A00
-> FFA00005080100F30000641A0000
<- 0000AF4BDA4E34B5D04A019000
<= AF4BDA4E34B5D04A01
=> AF6F18402E0F0E5357D854833B149FBB56
-> FFA00005170100F3000064AF6F18402E0F0E5357D854833B149FBB5600
<- 000000F0F667CCF0E140419000
<= 00F0F667CCF0E14041
READ
=> 3003
-> FFA00005080100F3000064300300
<- 0000000000000000000000000000000000009000
<= 00000000000000000000000000000000
CLOSE GENERIC SESSION
-> FFA0000703010002
<- 9000
MANAGE SESSION
, TRANSAPARENT EXCHANGE
和 SWITCH PROTOCOL
以标准化方式提供相同功能的命令(您的读者可能支持它而不是专有的通用 session 机制——HID 甚至参与了本文档)。 关于hid - 通过 HID OMNIKEY 5427 CK 向卡发送 APDU 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44622497/
嗨,我是 java 卡新手,我有以下数据 CLA '00' INS 'A2' nb not real value P1 '00' P2 '00' LC '08' Data In 'EF08' L
像这样将GPO命令定义为APDU命令: CLA INS P1 P2 Lc Data Le 80 A8 00 00 Lc Data 00 因此,缺少的部分是 Lc 和数据,我们必须根据PDOL的 P
我正在尝试手动生成 AC,我有一个生成 AC 的工具,但我想自己生成它以了解其算法。 我的计算对于 Discover 卡来说没问题,但对于 MasterCard 却失败了。据我了解,用于生成AC的数据
我需要通过芯片读取每张可能的卡的 PAN 码。在我的工作中,我只能使用 C,而且我没有可以帮助我完成这项无聊任务的例程。这就是我使用的 APDU 的步骤: 1) 选择 1PAY.SYS.DDF01 0
我正在编写 Java Applet。我需要使用 APDU 命令将预生成的 RSAPrivateCrtKey 上传到小程序。 我在我的电脑上生成 key 。接下来我在 privateKeyBuffer
我一直在使用有线智能卡读卡器 SDK,其中调用是同步的。最近一直在尝试蓝牙接口(interface),但 APDU 命令是异步的,因此我们无法解释为形成下一个 APDU 命令而发送的调用的响应。 任何
问题:假设有一个 Applet 的多个实例。当前选择了一个Applet 实例。是否可以将任何 APDU 命令从选定的 Applet 传递到另一个 Applet 实例?我在JavaCard API 3.
主机发送以下命令给小程序选择EF文件 00 A4 02 00 02 40 01 目的是选择 ID 为 40 01(在命令的数据字段中指定)的 EF 文件。 但是当我调试 process(APDU ap
我对符合 ISO7816-4 标准的首款行业间 APDU 感兴趣。这样的 APDU 可以/允许的最大长度是多少? 我能想到的最长的APDU应该是扩展长度的ISO case 4 APDU。这意味着我们有
我的新 javacard 上有一个小程序的 AID 列表。每个小程序的用途是什么?以及如何获得每个命令都支持的 APDU 命令列表?我需要小程序的 .cap 文件所用的 java 源代码吗?我的另一个
我创建了一个包(AID=0102030405),其中包含两个小程序。 这是第一个小程序 (AID=01020304050202020202) 的程序,它将 bArray 的内容存储到静态字段并在 pr
我正在尝试与显然是根据 EMV 规范实现的 SAM 进行通信。每当我问他们问题时,开发人员只会向我推荐 EMV 书籍。一瘸一拐地通过 EMV 卡和终端规范后,我终于设法一个接一个地发送命令,并使用 C
我正在使用javax.smartcardio通过CardChannel.transmit(CommandAPDU command)向智能卡发送APDU命令。 但是,似乎在某处定义了超时,因为当我没有收
我刚刚开始制作一个使用主机卡模拟 (HCE) 的应用程序,并且我已经完成了各种零碎工作。我需要该应用程序使手机表现得像一张卡,而另一部手机表现得像 NFC 读取器并扫描它,反之亦然,以便交换一小段信息
我正在尝试从智能卡中的文件中读取数据,我正在使用以下 APDU 命令 00 B0 00 02 00 但是我得到了这样的回应: A1 1B 4F 0C A0 00 00 00 77 02 08 05 0
我正在使用 JCard sim,java 卡版本 2.2.2,我想知道 .scr 文件如何与 .java 文件相关联。 (NetBeans IDE 上的 Java 卡模拟器。我没有使用实际的智能卡)。
我正在使用 javax.smartcardio 包来开发与智能卡相关的应用程序。我想发送伪 ADPU 命令来设置阅读器的 LED/LCD 状态。 我发现向读卡器/卡发送 APDU 命令的唯一方法是 C
如您所知,Gloabal Platform Card Specification定义了一个名为 Get Data 的命令来从智能卡中检索一些信息。 GlobalPlatformPro是与智能卡通信的流
哪个 APDU 命令获取卡 ID 的 7 个字节? 我使用带有 ISO14443 层的 T=CL (ISO7816) 协议(protocol)。在检测卡上,我只能看到卡 ID 的 4 个字节。 我发现
我想发送一个响应 APDU,其中包含响应数据字段以及非 0x9000 的状态字。考虑到我对 ISO 7816-4 的理解,这通常应该是可能的。 但是,每当我指定返回数据并尝试发送它时,我看不到任何显式
我是一名优秀的程序员,十分优秀!