我正在使用以下代码从 Athena 智能卡读卡器访问 PKCS#11 智能卡的内容。
Provider pkcs11Provider = new SunPKCS11(new ByteArrayInputStream (config.getBytes()));
if (Security.getProvider(pkcs11Provider.getName()) != null) {
Security.removeProvider(pkcs11Provider.getName());
}
Security.addProvider(pkcs11Provider);
KeyStore myKeyStore = KeyStore.getInstance ("PKCS11", pkcs11Provider);
myKeyStore.load(null, keystore_password.toCharArray());
return myKeyStore;
问题如下:
- 我输入了错误的密码。
- 代码抛出异常(如预期的那样)。
- 我输入正确的密码。
- 代码不会抛出异常(如预期的那样)。
- 我输入了错误的密码。
- 代码不会抛出异常(意外)。
根据http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html,使用KeyStore.Builder
该类时,使用相同的智能卡首次成功加载后不要求输入密码。当然,我在上面的代码中没有使用这个类。同样的事情适用于 KeyStore.getInstance(...)
方法吗?有没有办法让密钥库在输入错误密码时抛出异常,而不管之前的加载尝试如何?