【发布时间】:2012-03-18 12:31:36
【问题描述】:
我需要知道是否可以在不提供“storepass”的情况下从 KeyStore 中检索密钥。文档here 说“从密钥库中检索信息时,密码是可选的;如果没有给出密码,则无法检查检索到的信息的完整性并显示警告” p>
但是,当我尝试在没有密码的情况下获取密钥时,我得到 "java.lang.IllegalArgumentException: password can't be null" 异常。
以下是我创建 KeyStore 的方式
keytool -genseckey -alias "myKey" -keystore KEYSTORE.jks -storepass "password" -storetype "JCEKS" -keyalg AES -keysize 128
我尝试按如下方式检索它
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")),
null);
final Key key = keyStore.getKey("myKey", null);
这会引发以下异常
java.lang.IllegalArgumentException: password can't be null
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..)
at java.security.KeyStore.getKey(KeyStore.java:763)
我是否完全误解了文档?有没有其他方法可以解决这个问题,因为我没有看到在我的代码中清晰地存储“storepass”的意义,每个人都可以看到它,因此使密码无用。
【问题讨论】: