【问题标题】:Storing AES Secret key using keystore in java在 java 中使用密钥库存储 AES 密钥
【发布时间】:2014-01-28 13:28:25
【问题描述】:

我正在使用 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);

但我得到以下异常。

线程“主”java.security.KeyStoreException 中的异常:未初始化的密钥库
在 java.security.KeyStore.setEntry(Unknown Source)

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!我建议您阅读KeyStore 课程的文档,自己尝试一下,如果遇到困难请告诉我们。
  • 请尝试使用 jceks 密钥库进行至少适度的保护,并选择难以破解的密码(例如包含组成词的句子)。
  • 不要这样写代码。取决于先前try 块中代码成功的代码应该在该try 块内。在您的情况下,如果未找到该文件,则不会初始化密钥库,因此您不应执行剩余的代码。

标签: java encryption aes keystore


【解决方案1】:

根据KeyStore 文档,

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

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

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    相关资源
    最近更新 更多