我一直在尝试在Java上进行相互身份验证,这就是我正在做的事情:
首先我要求挑战并获得随机数。
TRX --> 0084000008
REC <-- 4E621D238C8B185F 9000
然后我计算一切,Key seed,enc,mac并发送相互授权命令:
TRX --> 0082000028[seed enc mac ... bytes transformed]00
REC <-- 6A88
我总是收到0x6A88,我在网上发现它意味着“找不到参考数据或参考数据”。
但奇怪的是,我的prois实现已经在C#上工作的代码到Java,我们一边测试它,我们用密钥等获得相同的数据,我发现当我要发送时相互身份验证(0x82)命令我得到了0x6A88错误。
以下是一些源代码,我想表明我尝试过使用和不使用beginExclusive()和endExclusive(),但是没有用。
public CardTerminal getCardTerminal() throws Exception {
CardTerminal ct = null;
TerminalFactory terminalFactory = TerminalFactory.getDefault();
CardTerminals cardTerminals = terminalFactory.terminals();
// Searches for first card terminal available on the PC
if (cardTerminals.list().isEmpty() == false) {
ct = cardTerminals.list().get(0);
}
return ct;
}
public void test() throws Exception {
CardTerminal cardTerminal;
Card card;
MyManager instance;
cardTerminal = getCardTerminal();
instance = new DpiV2Manager();
card = cardTerminal.connect("T=1");
card = connect(cardTerminal);
card.beginExclusive();
CardChannel cardChannel = card.getBasicChannel();
// Inside this method I do the get challange, mutual auth, etc
instance.readGeneralData(cardChannel);
card.endExclusive();
card.disconnect(true);
}
有没有人对Java进行相互身份验证有同样的问题?
有人找到了解决方案吗?
答案 0 :(得分:0)
我的问题是我试图在错误的applet上进行相互身份验证。我在get challenge APDU之前选择了正确的applet id,最后得到了它。