最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的SecretKeyFactory類使用詳解

 更新時間:2024年01月17日 10:30:03   作者:java-zh  
這篇文章主要介紹了Java中的SecretKeyFactory類使用詳解,SecretKeyFactory表示私密密鑰的工廠,密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉換為密鑰規(guī)范(底層密鑰材料的透明表示形式),需要的朋友可以參考下

一、簡述

SecretKeyFactory表示私密密鑰的工廠。

密鑰工廠用來將密鑰(類型 Key 的不透明加密密鑰)轉換為密鑰規(guī)范(底層密鑰材料的透明表示形式)

反之亦然。秘密密鑰工廠只對秘密(對稱)密鑰進行操作。

密鑰工廠為雙工模式,即其允許根據給定密鑰規(guī)范(密鑰材料)構建不透明密鑰對象,或以適當格式獲取密鑰對象的底層密鑰材料。

應用程序開發(fā)人員應參閱其提供者文檔,找出 generateSecret和 getKeySpec方法所支持的密鑰規(guī)范。例如,"SunJCE" 提供者提供的 DES 秘密密鑰工廠支持 DESKeySpec 作為 DES 密鑰的透明表示形式,并且該提供者的 Triple DES 密鑰的秘密密鑰工廠支持 DESedeKeySpec 作為 Triple DES 密鑰的透明表示形式。

二、源碼

2.1 構造方法

 
/** var1 委托
  * var2 提供者
  * var3 密匙算法
  */ 
protected SecretKeyFactory(SecretKeyFactorySpi var1, Provider var2, String var3) {
        this.spi = var1;
        this.provider = var2;
        this.algorithm = var3;
    }
/** var1 密匙算法
  */ 
private SecretKeyFactory(String var1) throws NoSuchAlgorithmException {
        this.algorithm = var1;
        List var2 = GetInstance.getServices("SecretKeyFactory", var1);
        this.serviceIterator = var2.iterator();
        if (this.nextSpi((SecretKeyFactorySpi)null) == null) {
            throw new NoSuchAlgorithmException(var1 + " SecretKeyFactory not available");
        }
    }

2.2 getInstance方法一詳解

public static final SecretKeyFactory getInstance(String var0) throws NoSuchAlgorithmException {
        return new SecretKeyFactory(var0);
    }

1、調用私有的SecretKeyFactory構造方法,返回轉換指定算法的秘密密鑰的 SecretKeyFactory 對象

2、此方法從首選 Provider 開始遍歷已注冊安全提供者列表。返回一個封裝 SecretKeyFactorySpi 實現的新 SecretKeyFactory 對象,該實現取自支持指定算法的第一個 Provider。

注意:可以通過 Security.getProviders() 方法獲取已注冊提供者列表。

2.3 algorithm參數

algorithm - 所請求的秘密密鑰算法的標準名稱。有關標準算法名稱的信息,請參閱 Java Cryptography Architecture Reference Guide中的附錄 A

拋出:NoSuchAlgorithmException - 如果沒有任何 Provider 支持指定算法的 SecretKeyFactorySpi 實現。

2.4 getInstance方法二

/** var0 密匙算法
  * var1 提供者
  */
public static final SecretKeyFactory getInstance(String var0, String var1) throws NoSuchAlgorithmException, NoSuchProviderException {
        Instance var2 = JceSecurity.getInstance("SecretKeyFactory", SecretKeyFactorySpi.class, var0, var1);
        return new SecretKeyFactory((SecretKeyFactorySpi)var2.impl, var2.provider, var0);
    }

返回轉換指定算法的秘密密鑰的 SecretKeyFactory 對象。

返回一個封裝 SecretKeyFactorySpi 實現的新 SecretKeyFactory 對象,該實現取自指定的提供者。指定提供者必須在安全提供者列表中注冊。

拋出異常

  • NoSuchAlgorithmException - 如果不能從指定提供者獲得指定算法的 SecretKeyFactorySpi 實現。
  • NullPointerException - 如果指定的算法為 null。
  • NoSuchProviderException - 如果指定提供者未在安全提供者列表中注冊。
  • IllegalArgumentException - 如果 provider 為 null 或空。

2.5 getInstance方法三詳解

/** var0 密匙算法
  * var1 提供者
  */ 
public static final SecretKeyFactory getInstance(String var0, Provider var1) throws NoSuchAlgorithmException {
        Instance var2 = JceSecurity.getInstance("SecretKeyFactory", SecretKeyFactorySpi.class, var0, var1);
        return new SecretKeyFactory((SecretKeyFactorySpi)var2.impl, var2.provider, var0);
    }

返回一個封裝 SecretKeyFactorySpi 實現的新 SecretKeyFactory 對象,該實現取自指定的 Provider 對象。注意,指定 Provider 對象無需在提供者列表中注冊。

拋出異常

  • NullPointerException - 如果指定的算法為 null。
  • NoSuchAlgorithmException - 如果不能從指定的 Provider 對象獲得指定算法的 SecretKeyFactorySpi 實現。
  • IllegalArgumentException - 如果 provider 為 null。

2.6 getProvider方法

返回此 SecretKeyFactory 對象的提供者。

 public final Provider getProvider() {
        synchronized(this.lock) {
            this.serviceIterator = null;
            return this.provider;
        }
    }

2.7 getAlgorithm方法

返回此 SecretKeyFactory 對象的算法名稱。 此名稱與在某個創(chuàng)建此 SecretKeyFactory 對象的 getInstance 調用中指定的名稱相同。

public final String getAlgorithm() {
        return this.algorithm;
    }

2.8 generateSecret方法

根據提供的密鑰規(guī)范(密鑰材料)生成 SecretKey 對象。

返回:秘密密鑰

拋出: InvalidKeySpecException - 如果給定密鑰規(guī)范不適合生成秘密密鑰的秘密密鑰工廠。

 
/*keySpec - 秘密密鑰的規(guī)范(密鑰材料)
 **/
public final SecretKey generateSecret(KeySpec var1) throws InvalidKeySpecException {
        if (this.serviceIterator == null) {
            return this.spi.engineGenerateSecret(var1);
        } else {
            Exception var2 = null;
            SecretKeyFactorySpi var3 = this.spi;
            while(true) {
                try {
                    return var3.engineGenerateSecret(var1);
                } catch (Exception var5) {
                    if (var2 == null) {
                        var2 = var5;
                    }
                    var3 = this.nextSpi(var3);
                    if (var3 == null) {
                        if (var2 instanceof InvalidKeySpecException) {
                            throw (InvalidKeySpecException)var2;
                        }
                        throw new InvalidKeySpecException("Could not generate secret key", var2);
                    }
                }
            }
        }
    }

2.9 getKeySpec方法

以請求的格式返回給定密鑰對象的規(guī)范(密鑰材料)。

返回:所請求格式的底層密鑰規(guī)范(密鑰材料)

拋出:InvalidKeySpecException - 如果所請求的密鑰規(guī)范不適合給定的密鑰(例如,與 key 和 keySpec 關聯(lián)的算法不匹配,或者 key 在加密硬件設備上引用一個密鑰而 keySpec 是基于軟件的密鑰規(guī)范),或者無法處理給定的密鑰(例如,給定的密鑰具有此秘密密鑰工廠不支持的算法或格式)。

/*key - 密鑰    
 *keySpec - 所請求的格式,密鑰材料將以此格式返回
 */
public final KeySpec getKeySpec(SecretKey var1, Class<?> var2) throws InvalidKeySpecException {
        if (this.serviceIterator == null) {
            return this.spi.engineGetKeySpec(var1, var2);
        } else {
            Exception var3 = null;
            SecretKeyFactorySpi var4 = this.spi;
            while(true) {
                try {
                    return var4.engineGetKeySpec(var1, var2);
                } catch (Exception var6) {
                    if (var3 == null) {
                        var3 = var6;
                    }
                    var4 = this.nextSpi(var4);
                    if (var4 == null) {
                        if (var3 instanceof InvalidKeySpecException) {
                            throw (InvalidKeySpecException)var3;
                        }
                        throw new InvalidKeySpecException("Could not get key spec", var3);
                    }
                }
            }
        }
    }

2.10 translateKey方法

將一個密鑰對象(其提供者未知或可能不受信任)轉換為此秘密密鑰工廠的相應密鑰對象。

返回:已轉換的密鑰

拋出:InvalidKeyException - 如果此秘密密鑰工廠無法處理給定的密鑰。

/*key - 其提供者未知或不受信任的密鑰
 */
public final SecretKey translateKey(SecretKey var1) throws InvalidKeyException {
        if (this.serviceIterator == null) {
            return this.spi.engineTranslateKey(var1);
        } else {
            Exception var2 = null;
            SecretKeyFactorySpi var3 = this.spi;
            while(true) {
                try {
                    return var3.engineTranslateKey(var1);
                } catch (Exception var5) {
                    if (var2 == null) {
                        var2 = var5;
                    }
                    var3 = this.nextSpi(var3);
                    if (var3 == null) {
                        if (var2 instanceof InvalidKeyException) {
                            throw (InvalidKeyException)var2;
                        }
                        throw new InvalidKeyException("Could not translate key", var2);
                    }
                }
            }
        }
    }

例如下面例子

 try {
            // 獲取密鑰工廠類對象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            byte[] DESkey = "abcdefghijk".getBytes("UTF-8");// 設置密鑰
            DESKeySpec keySpec = new DESKeySpec(DESkey);// 設置密鑰參數
            Key key = keyFactory.generateSecret(keySpec);// 得到密鑰對象
        } catch (Exception e) {
            e.printStackTrace();
        }

到此這篇關于Java中的SecretKeyFactory類使用詳解的文章就介紹到這了,更多相關SecretKeyFactory類詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java?NIO實現簡單聊天程序

    java?NIO實現簡單聊天程序

    這篇文章主要為大家詳細介紹了java?NIO實現簡單聊天程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于SpringMVC攔截器實現接口耗時監(jiān)控功能

    基于SpringMVC攔截器實現接口耗時監(jiān)控功能

    本文呢主要介紹了基于SpringMVC攔截器實現的接口耗時監(jiān)控功能,統(tǒng)計接口的耗時情況屬于一個可以復用的功能點,因此這里直接使用 SpringMVC的HandlerInterceptor攔截器來實現,需要的朋友可以參考下
    2024-02-02
  • springMVC如何將controller中Model數據傳遞到jsp頁面

    springMVC如何將controller中Model數據傳遞到jsp頁面

    本篇文章主要介紹了springMVC如何將controller中Model數據傳遞到jsp頁面,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • 關于@GetMapping和@GetMapping(value=““)的區(qū)別

    關于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關于@GetMapping和@GetMapping(value=““)的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 最新評論

    天镇县| 马关县| 佳木斯市| 黑龙江省| 繁昌县| 黄山市| 庆城县| 巴中市| 宁阳县| 房产| 湘潭市| 会理县| 鄂伦春自治旗| 康乐县| 蓬莱市| 永定县| 通许县| 兖州市| 安平县| 高尔夫| 和静县| 格尔木市| 商河县| 松原市| 行唐县| 陕西省| 平江县| 潜山县| 武定县| 漯河市| 东宁县| 元阳县| 务川| 琼海市| 武清区| 宣城市| 商洛市| 体育| 大兴区| 深圳市| 通道|