javax.smarcardio 未知异常 0x1f
Posted
技术标签:
【中文标题】javax.smarcardio 未知异常 0x1f【英文标题】:javax.smarcardio unknown exception 0x1f 【发布时间】:2016-08-08 13:44:59 【问题描述】:我现在正在研究读卡器。我想从卡中获取数据。我拿了uid。我想获取加密数据。所以我想进入安全模式并开始会话。我做了一些事情。我发送命令 apdu 来启动会话,但每次都返回未知异常 0x1f 这是代码。
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
terminal = terminals.get(0);
card = terminal.connect("T=1");
CardChannel channel = card.getBasicChannel();
byte[] c1 = (byte) 0x80, (byte) 0x72, (byte) 0x80, (byte) 0x00, (byte) 0x18, (byte) 0x5c, (byte) 0xc5,
(byte) 0x0a, (byte) 0xa2, (byte) 0x5b, (byte) 0x38, (byte) 0x7f, (byte) 0x81, (byte) 0x3a, (byte) 0x3d,
(byte) 0x1a, (byte) 0x88, (byte) 0x7d, (byte) 0x26, (byte) 0xfc, (byte) 0x2b, (byte) 0xa8, (byte) 0xa7,
(byte) 0xdd, (byte) 0xdc, (byte) 0x71, (byte) 0xe0, (byte) 0xf3, (byte) 0xc6 ;
ResponseAPDU response = channel.transmit(new CommandAPDU(0xFF, 0x00,0x00,0x00,c1,5,24));
此代码返回 6a81(表示函数不支持),
如果我这次直接发送启动会话命令(84 72 00 00)返回未知异常。
请帮助我。您不必在代码中查找错误。告诉我如何在智能卡中开始会话。我使用 HID OMNİKEY 5021 CL。
Exception in thread "main" javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
at CardReader.GetUID.getUID(GetUID.java:48)
at CardReader.GetUID.main(GetUID.java:86)
【问题讨论】:
您要访问哪种类型的卡?卡片使用什么协议? 终端:[PC/SC 终端 OMNIKEY CardMan 5x21-CL 0] 卡:OMNIKEY CardMan 5x21-CL 0 中的 PC/SC 卡,协议 T=1 我指的是非接触式智能卡/标签,而不是终端... T=CL, MIFARE®, iCLASS® / ISO 14443 A 848 Kbps 传输率(取决于卡),ISO 14443 B 848 Kbps 传输率(取决于卡),ISO 15693 26 Kbps 传输速率(取决于卡),您可以查看此 pdf hidglobal.com/sites/default/files/resource_files/… 你试过ResponseAPDU response = channel.transmit(new CommandAPDU(0x84, 0x72,0x00,0x00,c1,5,24));
吗?
【参考方案1】:
您发送的 APDU 错误,因为您以不正确的方式使用了 CommandAPDU
。
new CommandAPDU(0xFF, 0x00,0x00,0x00,c1,5,24)
创建一个以 FF000000185CC50AA2...
开头的 APDU,这不是您(可能)想要的。
改用new CommandAPDU(0x84, 0x72,0x00,0x00,c1,5,24)
。
请参阅 CommandAPDU javadoc 和 APDU format description。
【讨论】:
【参考方案2】:我发现了问题。问题是字节类型.net 和java。 C# 字节类型介于 0 和 255 之间,但 java 字节类型为 -127 和 +128。因此,如果我向 java 发送一个高于 127 的值,卡就会解释为负值。
【讨论】:
以上是关于javax.smarcardio 未知异常 0x1f的主要内容,如果未能解决你的问题,请参考以下文章
FISCO BCOS Transaction execution error合约执行失败原因
FISCO BCOS Transaction execution error合约执行失败原因