This class
translates asymmetric cryptographic keys between the two
representations used by the Java Security API.
java.security.Key is the opaque,
algorithm-independent representation of a key used by most of the
Security API. java.security.spec.KeySpec is a
marker interface implemented by transparent, algorithm-specific
representations of keys. KeyFactory is used with
public and private keys; see
javax.crypto.SecretKeyFactory if you are working
with symmetric or secret keys.
To
convert a Key to a KeySpec or
vice versa, create a KeyFactory by calling one of
the static getInstance( ) factory methods
specifying the name of the key algorithm (e.g., DSA or RSA) and
optionally specifying the name or Provider object
for the desired provider. Then, use generatePublic(
) or generatePrivate( ) to create a
PublicKey or PrivateKey object
from a corresponding KeySpec. Or use
getKeySpec( ) to obtain a
KeySpec for a given Key.
Because there can be more than one KeySpec
implementation used by a particular cryptographic algorithm, you must
also specify the Class of the
KeySpec you desire.
If you do not need to transport keys portably between applications
and/or systems, you can use a KeyStore to store
and retrieve keys and certificates, avoiding
KeySpec and KeyFactory
altogether.
public class KeyFactory {
// Protected Constructors
protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider,
String algorithm);
// Public Class Methods
public static KeyFactory getInstance(String algorithm)
throws NoSuchAlgorithmException;
public static KeyFactory getInstance(String algorithm, String provider)
throws NoSuchAlgorithmException, NoSuchProviderException;
1.4 public static KeyFactory getInstance(String algorithm, Provider provider)
throws NoSuchAlgorithmException;
// Public Instance Methods
public final PrivateKey generatePrivate(java.security.spec.KeySpec keySpec)
throws java.security.spec.InvalidKeySpecException;
public final PublicKey generatePublic(java.security.spec.KeySpec keySpec)
throws java.security.spec.InvalidKeySpecException;
public final String getAlgorithm( );
public final <T extends java.security.spec.KeySpec> T getKeySpec(Key key,
Class<T> keySpec)
throws java.security.spec.InvalidKeySpecException;
public final Provider getProvider( );
public final Key translateKey(Key key) throws InvalidKeyException;
}