JAvaの鍵ファクトリKeyFactory


一、概説
クラスはjava.securityパッケージの下にあり、宣言:public class KeyFactory extends Object
鍵ファクトリは、鍵(Key型の不透明な暗号化鍵)を鍵仕様(下位鍵材料の透明な表現)に変換するために使用され、逆も同様である.
鍵工場は双方向です.すなわち、これらは、所与の鍵仕様(鍵材料)に従って不透明な鍵オブジェクトを構築することを可能にし、また、適切なフォーマットで表される鍵オブジェクトの下位鍵材料を取得することを可能にする.
同じ鍵に対して複数の互換性のある鍵仕様が存在してもよい.例えば、DSA公開鍵は、DSAPublicKeySpecまたはX509EncodedKeySpecを使用して指定することができる.鍵ファクトリは、鍵仕様間の変換を互換化するために使用することができる.
以下に、鍵ファクトリを使用してDSA公開鍵を符号化する方法の例を示す.AliceがBobのデジタル署名を受け取ったと仮定します.Bobも彼女に公開鍵(符号化されたフォーマット)を送信して署名を検証した.Aliceは次の操作を行います.
 X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
 KeyFactory keyFactory = KeyFactory.getInstance("DSA");
 PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
 Signature sig = Signature.getInstance("DSA");
 sig.initVerify(bobPubKey);
 sig.update(data);
 sig.verify(signature);

二、構造方法
protected KeyFactory(KeyFactorySpi keyFacSpi,Provider provider, String algorithm)       KeyFactory   。

  
  
  
  
パラメータ:keyFacSpi-エージェントprovider-プロバイダalgorithm-これと
KeyFactory
関連付けられたアルゴリズム名
三、方法の詳細
1、
public static
KeyFactory
getInstance
(
String
 algorithm)
throws
NoSuchAlgorithmException指定アルゴリズムのpublic/privateキーワードを変換するKeyFactoryオブジェクトを返します
このメソッドは、優先Providerから登録されたセキュリティプロバイダのリストを巡回します.指定したアルゴリズムをサポートする最初のProviderから取得した、パッケージ化されたKeyFactorySpiインプリメンテーションの新しいKeyFactoryオブジェクトを返します.
なお、登録されたプロバイダのリストは、Security.getProviders()の方法で取得することができる.
パラメータ:algorithm-要求鍵アルゴリズムの名前.
戻る:新しいKeyFactoryオブジェクト.
放出:NoSuchAlgorithmException-指定されたアルゴリズムをサポートするKeyFactorySpiインプリメンテーションがProviderによってサポートされていない場合.
2、public static
KeyFactory
getInstance(
String algorithm,
String provider) throws
NoSuchAlgorithmException,
NoSuchProviderException
指定したアルゴリズムのpublic/privateキーワードを変換するKeyFactoryオブジェクトを返します.
指定されたプロバイダから取得されたKeyFactorySpiインプリメンテーションをカプセル化した新しいKeyFactoryオブジェクトを返します.プロバイダを指定するには、セキュリティプロバイダのリストに登録する必要があります.
なお、登録されたプロバイダのリストは、Security.getProviders()の方法で取得することができる.
パラメータ:algorithm-要求鍵アルゴリズムの名前.標準アルゴリズム名の詳細については、「
Java Cryptography Architecture API Specification&Referenceの付録A.provider-プロバイダの名前.
戻り値:
新しいKeyFactoryオブジェクト.
放出:NoSuchAlgorithmException-指定されたプロバイダから指定されたアルゴリズムを取得できない場合のKeyFactorySpi実装.NoSuchProviderException-指定されたプロバイダがセキュリティプロバイダリストに登録されていない場合.IllegalArgumentException-プロバイダ名がnullまたはnullの場合.
3、
public static
KeyFactory
getInstance
(
String
 algorithm,
Provider
 provider)
throws
NoSuchAlgorithmException
指定したアルゴリズムのpublic/privateキーワードを変換するKeyFactoryオブジェクトを返します.
指定したProviderオブジェクトから取得されたKeyFactorySpiインプリメンテーションをカプセル化した新しいKeyFactoryオブジェクトを返します.Providerオブジェクトをプロバイダリストに登録する必要はありません.
パラメータ:algorithm-要求鍵アルゴリズムの名前.標準アルゴリズム名については、Java Cryptography Architecture API Specification&Referenceの付録Aを参照してください.provider-プロバイダ.
戻り値:
新しいKeyFactoryオブジェクト.
放出:NoSuchAlgorithmException-指定されたProviderオブジェクトから指定されたアルゴリズムを取得できない場合のKeyFactorySpiインプリメンテーション.IllegalArgumentException-プロバイダがnullである場合.
4、
public final
Provider
getProvider
()このキーファクトリオブジェクトのプロバイダを返します.
5、
public final
String
getAlgorithm
()このKeyFactoryに関連付けられたアルゴリズムの名前を取得します. 
6、
public final
PublicKey
generatePublic
(
KeySpec
 keySpec)
throws
InvalidKeySpecException
公開鍵オブジェクトは、提供された鍵仕様(鍵材料)に基づいて生成される.
パラメータ:keySpec-公開鍵の仕様(鍵材料).
戻り値:
公開鍵
放出:InvalidKeySpecException-指定された鍵仕様がこの鍵ファクトリの公開鍵生成に適していない場合.
7、
public final
PrivateKey
generatePrivate
(
KeySpec
 keySpec)
throws
InvalidKeySpecExceptionは、提供された鍵仕様(鍵材料)に従って秘密鍵オブジェクトを生成する.
パラメータ:keySpec-秘密鍵の仕様(鍵材料).
戻り値:
秘密鍵.
放出:InvalidKeySpecException-指定された鍵仕様がこの鍵ファクトリの秘密鍵生成に適していない場合.
8、
public final KeySpec
> T
getKeySpec
(
Key
 key,
Class
 keySpec)
throws
InvalidKeySpecExceptionは、所与の鍵オブジェクトの仕様(鍵材料)を返します.keySpecは、返却鍵材料を受け入れるべき仕様クラスを識別する.たとえば、DSAPublicKeySpec.classキー材料がDSAPublicKeySpecクラスの一例. 
パラメータ:key-キー.keySpec-鍵材料を返す仕様クラスを受け入れる必要があります.
戻り値:
要求仕様クラスインスタンスの下位鍵仕様(鍵材料).
放出:InvalidKeySpecException-要求された鍵仕様が所与の鍵に適合していない場合、または所与の鍵を処理できない場合(例えば、所与の鍵は識別できないアルゴリズムまたはフォーマットを有する).
9、
public final
Key
translateKey
(
Key
 key)
throws
InvalidKeyExceptionは、プロバイダが不明または信頼されていない可能性のある鍵オブジェクトを、この鍵ファクトリに対応する鍵オブジェクトに変換します.
パラメータ:key-プロバイダが不明または信頼されていない鍵オブジェクト.
戻り値:
変換されたキー.
放出:InvalidKeyException-このキーファクトリが所与のキーを処理できない場合.