2013-06-12 32 views
3

我正在使用以下代碼從Athena智能卡讀卡器訪問PKCS#11智能卡的內容。PKCS#11 keystore在成功嘗試輸入密碼後未驗證密碼

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; 

的問題如下:

  1. 我輸入錯誤的密碼。
  2. 代碼拋出異常(如預期的那樣)。
  3. 我輸入正確的密碼。
  4. 代碼不會拋出異常(如預期的那樣)。
  5. 我輸入了錯誤的密碼。
  6. 代碼確實不是拋出異常(意外)。

http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html,當使用KeyStore.Builder類沒有密碼,請使用相同的智能卡首次成功加載後進行。當然,我沒有在上面的代碼中使用這個類。同樣的事情適用於KeyStore.getInstance(...)方法嗎?在輸入錯誤的密碼時,是否有任何方法可以使密鑰庫拋出異常,而不管以前的加載嘗試如何?

回答

4

試試這個

((SunPKCS11) pkcs11Provider).logout(); 
pkcs11Provider.clear(); 

如果這不幫助,然後每次登錄

+1

該解決方案可以作爲是之前更換新創建SunPKCS11對象的提供者。非常感謝! –