java - 在 java 中使用 keystore 存储 AES key

标签 java encryption aes keystore

我正在使用 Java keystore 来存储 AES 加密的 key 。

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);

但是我遇到了异常。

Exception in thread "main" java.security.KeyStoreException: Uninitialized keystore
at java.security.KeyStore.setEntry(Unknown Source)

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

最佳答案

根据KeyStore文档,

Before a keystore can be accessed, it must be loaded.

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

关于java - 在 java 中使用 keystore 存储 AES key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406884/

相关文章:

java - 停止扫描仪等待输入

amazon-web-services - 数据如何在内部存储在 AWS DynamoDB 上?加密还是纯文本?

encryption - 我应该使用哪种加密方法?

java - 图像未在 .jar 中运行

java - 如何在带有参数和自定义返回对象的方法上运行 junit 测试

c# - 从node.js解密.NET中的AES256加密数据 - 如何从密码中获取IV和Key

c++ - AES_cbc_encrypt 是否添加填充?

java - 如何在 Java 中为 AES 算法创建自己的 key ?

java - Gradle jacoco 多项目。如何在终端输出所有项目的代码覆盖率?

security - 这种情况安全吗?