JCA 實(shí)踐記錄——KeyFactory

KeyFactory(密鑰工廠)用對密鑰(Key類型的不透明密鑰)和密鑰規(guī)范(KeySpec類型的底層密鑰密鑰材料的透明表示)進(jìn)行相互轉(zhuǎn)換;也就是密鑰工廠是雙向的,可以把Key轉(zhuǎn)換成KeySpec,也可以把KeySpec轉(zhuǎn)換成Key。另外對于同一個密鑰可以存在多個兼容的密鑰規(guī)范。

SecretKeyFactoryKeyFactory的不同在于:KeyFactory用于非對稱密鑰加密時(shí)的密鑰轉(zhuǎn)換,而 SecretKeyFactory 用于對稱密鑰加密時(shí)的密鑰轉(zhuǎn)換。

  1. Key:不透明的底層密鑰,用于程序中的各個加密、解密、簽名、驗(yàn)簽等算法的使用。
  2. 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)密鑰對象。

支持的算法:

  1. DiffieHellman
  2. DSA
  3. RSA
  4. EC
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,619評論 1 32
  • JCA是平臺的一個主要部分,包含一個“Provider”體系結(jié)構(gòu)和一組用于數(shù)字簽名,消息摘要(哈希),證書和證書驗(yàn)...
    jection閱讀 5,733評論 1 9
  • 概述 之前一直對加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對數(shù)據(jù)傳輸進(jìn)行加密,且各種加密算法各有...
    Henryzhu閱讀 3,208評論 0 14
  • 讀完了這本書,給我非常多的感悟。作者告訴我們,如何改善自己的人生,提供寶貴的思考方法。讓我們自行設(shè)定有意義的人生旅...
    簡書jianshu1閱讀 9,864評論 0 3
  • 以前還認(rèn)為自己心思細(xì)膩,呵呵,其實(shí)我的細(xì)膩全是在乎別人對我的感受和看法,以自我為中心,是自私的。沒有看到兒子身上那...
    涂小倩閱讀 128評論 0 0

友情鏈接更多精彩內(nèi)容