Different types of keystore in Java -- JCEKS

English 简体中文 繁体中文 ภาษาไทย Tiếng Việt
Summary

JCEKS, or Java Cryptography Extension KeyStore, provides an alternative format for securely storing encryption keys and certificates within Java applications. Its operational flow for managing entries closely resembles JKS, primarily differing by requiring "JCEKS" when initializing a KeyStore instance. A key focus is on securely handling secret keys, which are sealed and protected by a password within the keystore. Developers can store a generated secret key using `keyStore.setKeyEntry()` and persist it, then later retrieve it with `keyStore.getKey()` for use in cryptographic operations. This approach helps prevent the exposure of sensitive key data.

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 TUTORIAL KEYSTORE JCEKS

  RELATED

  COMMENT

1
Anonymous
Mar 4, 2021 at 3:02 pm

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