使用java中的密钥库存储AES密钥

use*_*519 5 java encryption aes keystore

我正在使用Java密钥库来存储AES加密的密钥.

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);
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外.

线程"main"中的异常java.security.KeyStoreException:java.security.KeyStore.setEntry中的未初始化密钥库
(未知来源)

如何解决这个错误?提前致谢

Alo*_*hra 2

根据KeyStore 文档

在访问密钥库之前,它必须是loaded.

为了创建空密钥库,或者如果无法从流初始化密钥库,请将 null 作为流参数传递。

因此,您正在加载 KeyStore,但是如果FileNotFoundException发生在 fis = new java.io.FileInputStream("keyStoreName");,因此如果文件不存在,我们将加载 KeyStore 的null值,例如 , ks.load(null,null);