2015-06-03 32 views
0

我試圖解密存儲在Securestorage文件中的數據庫密碼。我正在使用nCipherKM HSM安全提供程序,並且用於解密的密鑰加密密鑰存儲在密鑰存儲區(文件夾)中。雖然我嘗試通過傳遞密鑰庫密碼加載HSM密鑰庫,但未能使用以下異常加載密鑰庫。不知道這個錯誤的根本原因是什麼。使用nCipherKM解密HSM密鑰時出錯

代碼段:

java.security.provider hsm_provider = (java.security.provider)Class.forName("com.ncipher.provider.km.nCipherKM").newInstance(); 
java.security.Security.addProvider(hsm_provider); 
myKeyStore = KeyStore.getInstance(KeyStore.getDefaulttype,"nCipherKM"); 
myKeyStore .load(new FileInputStream(KeyStorePath),pwdOfKeyStore); 

例外:

產生java.io.IOException:密碼被提供,但所有按鍵都 模塊保護。在 com.ncipher.provider.km.KMKeyStore.engineLoad()

回答

1

注:發佈這個答案在幫助別人誰遇到同樣的問題的希望的老問題。

根本原因可能是密鑰庫是通過用模塊保護密鑰的選項創建的。這並不意味着密碼是可選的,這意味着它是被禁止的。

要修復,請使用以下

java.security.provider hsm_provider = (java.security.provider)Class.forName("com.ncipher.provider.km.nCipherKM").newInstance(); 
java.security.Security.addProvider(hsm_provider); 
myKeyStore = KeyStore.getInstance(KeyStore.getDefaulttype,"nCipherKM"); 
myKeyStore .load(new FileInputStream(KeyStorePath),null); 

注意代碼:如果你試圖提取從密鑰庫中的私有密鑰,你應該在一個空通得過,如下所示:

PrivateKey privateKey = (PrivateKey)keystore.getKey(KEYSTORE_ALIAS, null);