Security學習筆記1

獲取公鑰對象思路:
1、首先得到公私鑰對
//以指定的算法實例化KeyPairGenerator對象
KeyPairGenerator keygen = KeyPairGenerator.getInstance("DSA");
//初始化KeyPairGenerator
keygen.initialize(1024);
//生成KeyPair對象
KeyPair keys = keygen.genKeyPair();
 2、得到公鑰字節數組
  byte[] publicKeyBytes = keys.getPublic().getEncoded();
//實例化X509EncodedKeySpec對象
3、利用公鑰字節數組構造公鑰對象。
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
//以指定的算法實例化KeyFactory對象 
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
//獲得PublicKey對象
//public final PublicKey generatePublic(KeySpec keySpec)根據提供的密鑰規範(密鑰材料)生成公鑰對象。 

PublicKey publicKey = keyFactory.generatePublic(keySpec);

私鑰創建過程與公鑰類似

AlgorithmParameterGenerator對象創建過程

1、調用AlgorithmParameterGenerator.getInstance()方法:

1)在方法getInstance()內部調用Security.getImpl(algorithm, "AlgorithmParameterGenerator", (String)null);方法返回一個對象數組
2)在調用帶參數的構造函數創建新的AlgorithmParameterGenerator對象返回
new AlgorithmParameterGenerator((AlgorithmParameterGeneratorSpi)objs[0], (Provider)objs[1], algorithm);

2、Initializes this parameter generator for a certain size.
public final void init(int size)

getInstance源碼:
 public static AlgorithmParameterGenerator getInstance(String algorithm,
                                                          String provider)
        throws NoSuchAlgorithmException, NoSuchProviderException
    {
        if (provider == null || provider.length() == 0)
            throw new IllegalArgumentException("missing provider");
        Object[] objs = Security.getImpl(algorithm,
                                         "AlgorithmParameterGenerator",
                                         provider);
        return new AlgorithmParameterGenerator
            ((AlgorithmParameterGeneratorSpi)objs[0], (Provider)objs[1],
             algorithm);
    }
    
    AlgorithmParameters、AlgorithmParameterGenerator等類的getInstance()方法內部實現結構基本相同。
    
    X509EncodedKeySpec用於構建公鑰規範,PKCS8EncodedKeySpec用於構建私鑰規範
    
    SecretKeySpec接口是KeySpec的實現類,用於構建祕密祕鑰規範

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章