【发布时间】:2014-09-16 16:11:52
【问题描述】:
我一直在尝试在 Java 上进行相互身份验证,这就是我正在做的事情:
首先我要求挑战并获得随机数。
TRX --> 0084000008
REC <-- 4E621D238C8B185F 9000
然后我计算一切,密钥种子,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 进行相互身份验证时遇到同样的问题?
有人找到解决方案了吗?
【问题讨论】:
-
什么协议的相互认证?你会通过 AID 进行 SELECT 吗?
-
是的,我有,忘了把它放在我的问题中。但是你给我一个线索,说明我的问题是什么,我选择了一个小程序,但是我必须在另一个小程序中进行相互身份验证。我会更新我的帖子。谢谢@owlstead
-
谢谢@owlstead!我试图在错误的小程序上进行相互身份验证。
标签: java smartcard javacard pcsc