2

我正在尝试解密存储在 Securestorage 文件中的数据库密码。我正在使用 nCipherKM HSM 安全提供程序,用于解密的密钥加密密钥存储在密钥库(文件夹)中。当我尝试通过传递密钥库密码来加载 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()

4

1 回答 1

2

注意:将这个答案发布到一个老问题,希望能帮助遇到同样问题的其他人。

根本原因可能是创建密钥库时选择了使用模块保护密钥的选项。这并不意味着密码是可选的,它意味着它是被禁止的。

要修复,请使用下面的代码

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);

注意:如果您尝试从密钥库中提取私钥,您也应该传入一个 null,如下所示:

PrivateKey privateKey = (PrivateKey)keystore.getKey(KEYSTORE_ALIAS, null);
于 2016-01-16T00:36:38.507 回答