我目前尝试编写有关JavaCard applet的测试。我使用JUnit和javax.smartcardio将我的所有命令发送到smartCard。 但我需要打开一个安全通道才能使我的测试之一正常运行。 经过两天对文档和实验的重新研究,我无法找到打开此安全通道的方法。有没有人对smartcardio API有所了解?还是其他愿意这样做的API?
//TODO: need secure channel
byte[] header = {(byte)0x02, (byte)0x01, (byte)0x01}; //tag + length
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
outputStream.write(header);
outputStream.write(Value.SN.getBytes());
byte[] excpectedRes = outputStream.toByteArray();
// not a secure channel at all
ResponseAPDU answer = channel.transmit(new CommandAPDU(0x84, 0xCA, 0x02, 0x01, Value.Emptydata));
nameTest = "Test Select Serial number " + answer.toString();
CheckSW(0x90, 00, answer);
CheckResult(excpectedRes, result);
这是我的代码,我总是得到0x69 0x82答案(安全状态不满意)
由于
答案 0 :(得分:0)
这里的问题是您正在尝试发送需要身份验证的Get Data
命令,这意味着您应该在使用Get data命令之前运行initialize update
和external authenticate
。
如果您只是想测试代码是否正常工作,可以选择MF进行测试,APDU是
A0 A4 00 00 02 3F00
将返回9F XX
。