在Java中使用密钥库存储AES密钥
我正在使用Java密钥库存储AES加密的秘密密钥。
I am using Java keystore to store the secret key for AES encryption.
final String strToEncrypt = "Hello World";
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128);
SecretKey sk = kg.generateKey();
String secretKey = String.valueOf(Hex.encodeHex(sk.getEncoded()));
//Storing AES Secret key in keystore
KeyStore ks = KeyStore.getInstance("JCEKS");
char[] password = "keystorepassword".toCharArray();
java.io.FileInputStream fis = null;
try {
fis = new java.io.FileInputStream("keyStoreName");
ks.load(fis, password);
} finally {
if (fis != null) {
fis.close();
}
KeyStore.ProtectionParameter protParam =
new KeyStore.PasswordProtection(password);
KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(sk);
ks.setEntry("secretKeyAlias", skEntry, protParam);
但是我正在获得以下异常。
But i am getting following Exception.
线程main中的异常java.security.KeyStoreException:未初始化的密钥库
java.security.KeyStore.setEntry(Unknown Source)
Exception in thread "main" java.security.KeyStoreException: Uninitialized keystore
at java.security.KeyStore.setEntry(Unknown Source)
如何解决这个错误?感谢提前
How to fix this error? Thanks in advance
根据 KeyStore
文档,
在访问密钥库之前,必须
加载
。
所以你正在加载KeyStore,但是如果一个 FileNotFoundException
发生在 fis = new java.io.FileInputStream(keyStoreName);
,因此如果文件不存在,我们加载KeyStore与 null
值,例如 ks.load(null,null);
。
so you are loading the KeyStore but what if a FileNotFoundException
occures at
fis = new java.io.FileInputStream("keyStoreName");
, hence if file does not exist we load the KeyStore with null
values ,like , ks.load(null,null);
.