JCEKS 代表 Java 加密扩展密钥库,它是 Java 平台的一种替代密钥库格式。将密钥存储在密钥库中可以作为防止加密密钥泄露的一种措施。Java 密钥库安全地包含各个证书和密钥,这些证书和密钥可以通过别名在 Java 程序中引用。
在 JCEKS 中存储和加载不同条目的过程类似于 JKS 的过程。因此,请参考文章 Java 中不同类型的密钥库 -- JKS。调用 KeyStore.getInstance() 时,相应地将密钥库类型从 JKS 更改为 JCEKS。
在这篇文章中,我们只介绍在 JCEKS 密钥库中存储密钥的过程。密钥条目将被密封并存储在密钥库中以保护密钥数据。存储条目到密钥库时,请提供强密码。
存储密钥
密钥可以使用以下代码存储在 JCEKS 密钥库中。
try{ KeyStore keyStore = KeyStore.getInstance("JCEKS"); keyStore.load(null, null); KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56);; Key key = keyGen.generateKey(); keyStore.setKeyEntry("secret", key, "password".toCharArray(), null); keyStore.store(new FileOutputStream("output.jceks"), "password".toCharArray()); } catch (Exception ex) { ex.printStackTrace(); }
加载密钥
存储的密钥可以从 Java 中的 JCEKS 密钥库中提取。提取的密钥可以像平常一样用于加密/解密数据。
try{ KeyStore keyStore = KeyStore.getInstance("JCEKS"); keyStore.load(new FileInputStream("output.jceks"), "password".toCharArray()); Key key = keyStore.getKey("secret", "password".toCharArray()); System.out.println(key.toString()); } catch (Exception ex) { ex.printStackTrace(); }
输出结果是:
javax.crypto.spec.SecretKeySpec@fffe7b9b
有关不同类型的密钥库,请参考 Java 中不同类型的密钥库 -- 概述。
why using "password" twice just after you said "please use strong password" :(