KeyFactory(密鑰工廠)用對密鑰(Key類型的不透明密鑰)和密鑰規(guī)范(KeySpec類型的底層密鑰密鑰材料的透明表示)進(jìn)行相互轉(zhuǎn)換;也就是密鑰工廠是雙向的,可以把Key轉(zhuǎn)換成KeySpec,也可以把KeySpec轉(zhuǎn)換成Key。另外對于同一個密鑰可以存在多個兼容的密鑰規(guī)范。
SecretKeyFactory 和 KeyFactory的不同在于:KeyFactory用于非對稱密鑰加密時(shí)的密鑰轉(zhuǎn)換,而 SecretKeyFactory 用于對稱密鑰加密時(shí)的密鑰轉(zhuǎn)換。
-
Key:不透明的底層密鑰,用于程序中的各個加密、解密、簽名、驗(yàn)簽等算法的使用。 -
KeySpec:底層密鑰的透明表示,可用于密鑰的存儲,交換等。
程序生成的Key要進(jìn)行存儲和交換,必須要先轉(zhuǎn)換成KeySpec;而在持久化設(shè)備中存儲的或在網(wǎng)絡(luò)中傳輸?shù)拿荑€也必須經(jīng)過KeySpec才能被轉(zhuǎn)換成Key最終供應(yīng)用中的加密、解密、簽名、驗(yàn)簽等算法使用。
實(shí)例化
KeyFactory 沒有公開的構(gòu)造方法,只能使用 getInstance方法進(jìn)行實(shí)例化。這個方法有多個重載如下:
public static KeyFactory getInstance(String algorithm)
throws NoSuchAlgorithmException;
public static KeyFactory getInstance(String algorithm, Provider provider)
throws NoSuchAlgorithmException;
public static KeyFactory getInstance(String algorithm, String provider)
throws NoSuchAlgorithmException, NoSuchProviderException;
我們最常用的是 public static KeyFactory getInstance(String algorithm),此方法需要一個字符串作為參數(shù),用于說明使用哪個密鑰算法。
可用方法
generatePrivate
public final PrivateKey generatePrivate(KeySpec keySpec)
throws InvalidKeySpecException
根據(jù)給定的KeySpec對象,生成PrivateKey(私鑰)對象。
generatePublic
public final PublicKey generatePublic(KeySpec keySpec)
throws InvalidKeySpecException
根據(jù)給定的KeySpec對象,PublicKey(生成公鑰)對象。
getKeySpec
public final <T extends KeySpec> T getKeySpec(Key key, Class<T> keySpec)
throws InvalidKeySpecException
參數(shù)中給定的Key是待轉(zhuǎn)換的密鑰,而Class<T>是需要轉(zhuǎn)換成的目標(biāo)KeySpec類。
此方法就是要把給定的Key對象轉(zhuǎn)換成目標(biāo)KeySpec類對象。
translateKey
public final Key translateKey(Key key) throws InvalidKeyException
將密鑰對象(其提供程序可能是未知的或可能不受信任的)轉(zhuǎn)換為此密鑰工廠的相應(yīng)密鑰對象。
支持的算法:
- DiffieHellman
- DSA
- RSA
- EC