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" :(