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

Java中的SecretKeyFactory類使用詳解

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

一、簡述

SecretKeyFactory表示私密密鑰的工廠。

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

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

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

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

二、源碼

2.1 構(gòu)造方法

 
/** 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、調(diào)用私有的SecretKeyFactory構(gòu)造方法,返回轉(zhuǎn)換指定算法的秘密密鑰的 SecretKeyFactory 對象

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

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

2.3 algorithm參數(shù)

algorithm - 所請求的秘密密鑰算法的標(biāo)準(zhǔn)名稱。有關(guān)標(biāo)準(zhǔn)算法名稱的信息,請參閱 Java Cryptography Architecture Reference Guide中的附錄 A

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

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);
    }

返回轉(zhuǎn)換指定算法的秘密密鑰的 SecretKeyFactory 對象。

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

拋出異常

  • NoSuchAlgorithmException - 如果不能從指定提供者獲得指定算法的 SecretKeyFactorySpi 實現(xiàn)。
  • 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 實現(xiàn)的新 SecretKeyFactory 對象,該實現(xiàn)取自指定的 Provider 對象。注意,指定 Provider 對象無需在提供者列表中注冊。

拋出異常

  • NullPointerException - 如果指定的算法為 null。
  • NoSuchAlgorithmException - 如果不能從指定的 Provider 對象獲得指定算法的 SecretKeyFactorySpi 實現(xiàn)。
  • 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 調(diào)用中指定的名稱相同。

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

2.8 generateSecret方法

根據(jù)提供的密鑰規(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 關(guān)聯(lián)的算法不匹配,或者 key 在加密硬件設(shè)備上引用一個密鑰而 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方法

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

返回:已轉(zhuǎn)換的密鑰

拋出: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");// 設(shè)置密鑰
            DESKeySpec keySpec = new DESKeySpec(DESkey);// 設(shè)置密鑰參數(shù)
            Key key = keyFactory.generateSecret(keySpec);// 得到密鑰對象
        } catch (Exception e) {
            e.printStackTrace();
        }

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

相關(guān)文章

  • java?NIO實現(xiàn)簡單聊天程序

    java?NIO實現(xiàn)簡單聊天程序

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

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

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

    springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁面

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

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

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

    满洲里市| 阿拉善右旗| 万州区| 寿光市| 连州市| 大连市| 新津县| 商都县| 上思县| 新河县| 黄冈市| 靖边县| 邓州市| 巴中市| 宁海县| 高台县| 汝阳县| 南充市| 承德县| 长宁县| 林周县| 和林格尔县| 谷城县| 永川市| 嘉善县| 莒南县| 徐闻县| 陆河县| 苍梧县| 堆龙德庆县| 武鸣县| 天峨县| 梁平县| 耿马| 中江县| 朝阳区| 齐河县| 湖州市| 沁水县| 九台市| 壶关县|