javax.smarcardio 未知异常 0x1f
javax.smarcardio unknown exception 0x1f
我正在制作卡片 reader。我想从卡中获取数据。我服用了uid。我想获取加密数据。所以我想进入安全模式并开始会话。我做了一些事情。我发送命令 apdu 开始会话,但每次 return 未知异常 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));
此代码returns me 6a81(表示功能不支持),
如果我这次直接发送启动会话命令(84 72 00 00)return未知异常。
请帮助我。您不必在代码中查找错误。告诉我如何在智能卡中启动会话。我用的是 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)
您发送的 APDU 是错误的,因为您使用 CommandAPDU
的方式不正确。
new CommandAPDU(0xFF, 0x00,0x00,0x00,c1,5,24)
创建一个从 FF000000185CC50AA2...
开始的 APDU,这不是您(可能)想要的。
试试 new CommandAPDU(0x84, 0x72,0x00,0x00,c1,5,24)
。
我发现了问题。问题是字节类型 .net 和 java。 C# 字节类型介于 0 和 255 之间,但 java 字节类型为 -127 和 +128。因此,如果我向 java 发送一个高于 127 的值,卡片将解释为负值。
我正在制作卡片 reader。我想从卡中获取数据。我服用了uid。我想获取加密数据。所以我想进入安全模式并开始会话。我做了一些事情。我发送命令 apdu 开始会话,但每次 return 未知异常 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));
此代码returns me 6a81(表示功能不支持),
如果我这次直接发送启动会话命令(84 72 00 00)return未知异常。
请帮助我。您不必在代码中查找错误。告诉我如何在智能卡中启动会话。我用的是 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)
您发送的 APDU 是错误的,因为您使用 CommandAPDU
的方式不正确。
new CommandAPDU(0xFF, 0x00,0x00,0x00,c1,5,24)
创建一个从 FF000000185CC50AA2...
开始的 APDU,这不是您(可能)想要的。
试试 new CommandAPDU(0x84, 0x72,0x00,0x00,c1,5,24)
。
我发现了问题。问题是字节类型 .net 和 java。 C# 字节类型介于 0 和 255 之间,但 java 字节类型为 -127 和 +128。因此,如果我向 java 发送一个高于 127 的值,卡片将解释为负值。