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