智能卡没有响应重置。

4
我一直在处理智能卡的读/写操作,我相信我的卡是 sle_4428 并且我正在使用 HID OMNIKEY 3121 USB 读卡器。问题在于,当我将卡片插入读卡器时,我的程序响应为智能卡未响应重置,错误代码为0x80100066,而不是连接卡片并获取ATR...。
[编辑] 如果我只进行读取操作,则运行良好。 当我进行写操作然后重新插入卡片时,它就停止响应,并显示上述消息。 我用于写入的 APDU 命令是:FF D6 00 00 #(01 02)

1
你试过另一张卡吗? - guidot
是的,我尝试了不同的卡片,一开始它被检测到并且我成功读/写了数据,但是再次插入后,它停止响应并显示与上述相同的错误消息。 - Darab Javaid
始终检查您发送的命令的长度。 - shadygoneinsane
@shadygoneinsane,如果我只执行读操作,它就可以正常工作。但是当我执行写操作并重新插入卡片时,它停止响应并显示上述信息......我用于写入的APDU命令是:FF D6 00 00#(01 02)。 - Darab Javaid
我们也遇到了HID OMNIKEY 5421重置的问题。我尝试查看HID Omnikey Workbench工具及其dll文件。我找到了一个方法,名为“WAntennaControl”。使用此方法,您可以正确地冷重置智能卡。尝试使用Workbench工具并从那里进行重置。 - TomazStoiljkovic
1个回答

1
你的问题是HID Omnikey无法正确地进行"冷"重置智能卡。
使用以下Java代码片段,您可以重置HID Omnikey读卡器CL。
import jnasmartcardio.Smartcardio;

import javax.smartcardio.*;
import javax.xml.bind.DatatypeConverter;

public class OMNIKEYConfiguration {

public static void main(String... args) throws Exception {
    TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null, new Smartcardio());

    String terminalName = "OMNIKEY CardMan 5x21-CL 0";
    CardTerminal terminal = factory.terminals().getTerminal(terminalName);

    // Connect directly to reader
    Card card = terminal.connect("DIRECT");

    int code = 3224092; // #define IOCTL_CCID_ESCAPE SCARD_CTL_CODE(3500)
    byte[] command = DatatypeConverter.parseHexBinary("0300"); // 0300 - ON; 0301 - OFF
    byte[] resp = card.transmitControlCommand(code, command);
    System.out.println(DatatypeConverter.printHexBinary(resp));

    card.disconnect(true);
}
}

使用命令"0x0300"打开天线,否则使用"0x0301"关闭天线。
进行冷重启时,请先调用关闭命令,然后再调用打开命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接