我需要知道是否有可能在没有提供'storepass'的情况下从KeyStore获取密钥。文档here说“当从密钥库中检索信息,密码是可选的;如果没有密码,给出的检索信息的完整性不能被检查并显示警告”KeyStore无密码获取密钥
然而,当我尝试无密码获取密钥我得到“java.lang.IllegalArgumentException:密码不能为空”异常。
以下是我如何创建密钥库
密钥工具-genseckey -alias “的myKey” -keystore KEYSTORE.jks -storepass “密码” -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'的地方,因为每个人都可以看到它,因此使密码无用。
是的,貌似我没有误会d ocumentation。那么有没有建议的解决方案来解决这个问题?我只是不能在代码中拥有这样的密码。谢谢 – Nishant 2012-03-19 16:28:34
所以你的问题是为了避免代码中的硬编码密码?这是最常见的问题。你真的不能做太多的事情。推荐的方法一般是从用户请求密码。如果你不能这样做你可以做一些精心设计的例如对密码进行加密,但这并不会让你感到太多。也可以将责任委托给用户,即保持文件系统的安全。 – Cratylus 2012-03-19 16:47:06