解密存储Java密钥存储
问题描述:
里面的关键当我创建通过下面的代码的加密密钥失败。解密存储Java密钥存储
我已经存储在Java密钥存储在这里面的关键,并保存在FS:
KeyStore ks = KeyStore.getInstance("JCEKS");
ks.setKeyEntry(keyAlias, key ,keyPassword.toCharArray(), null);
FileOutputStream fileOutputStream = new FileOutputStream (keyStorePath);
keyStore.store(fileOutputStream , keyStorePassword.toCharArray());
fileOutputStream.close();
在不同的过程中,我打开密钥存储,并尝试解密一些文字:
KeyStore ks2 = KeyStore.getInstance("JCEKS");
ks2.load(new java.io.FileInputStream(keyStorePath), ksPassword.toCharArray());
SecretKeyFactory skFactory2 = SecretKeyFactory.getInstance("PBEWithSHA1AndDESede");
String passForTheKey = ks2.getKey(keyAlias, keyPass.toCharArray()).toString();
KeySpec key = new PBEKeySpec(passForTheKey.toCharArray());
SecretKey sKey2 = skFactory.generateSecret(key);
当试图解密文本我得到的错误:
java.security.InvalidKeyException: Given final block not properly padded
如果我尝试使用键,但不将其存储在T他在创建它之后立即关键存储,其刻录过程效果很好。
任何想法?
答
您正在将密钥存储在密钥库中(这是正常的)。但是,您似乎试图将其作为密码读取,以便稍后生成新密钥。
取而代之的是:
String passForTheKey = ks2.getKey(keyAlias, keyPass.toCharArray()).toString();
KeySpec key = new PBEKeySpec(passForTheKey.toCharArray());
SecretKey sKey2 = skFactory.generateSecret(key);
使用本:
SecretKey sKey2 = (SecretKey) ks2.getKey(keyAlias, keyPassword.toCharArray());
什么你从密钥库阅读是关键本身(如你保存它),而不是一些密码。 (generateSecret
只会生成一个新的密钥。)
哦!我没有看到......谢谢! – 2011-06-16 13:55:48