Different types of keystore in Java -- JCEKS

  Pi Ke        2015-01-05 00:30:56       54,219        1          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

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 中不同類型的金鑰儲存庫 -- 概述

JAVA  KEYSTORE  JCEKS  TUTORIAL 

       

  RELATED


  1 COMMENT


Anonymous [Reply]@ 2021-03-04 15:02:23

why using "password" twice just after you said "please use strong password" :(



  RANDOM FUN

Stackoverflooooooow

Stackoverflow is celebrating its 10 million questions. This is a big milestone for this question-answer website. Here is the page to record all these amazing moments. http://stackoverflow.com/10m