java.security

接口
异常
java.lang.Object
  继承者 java.security.KeyFactory

public class KeyFactory
     
extends Object

密钥工厂用于将密钥Key 类型的不透明加密密钥)转换成密钥规范(底层密钥材料的透明表示),反之亦然。

密钥工厂是双向的。也就是说,它们允许根据给定的密钥规范(密钥材料)构建不透明的密钥对象,也允许获取以恰当格式表示的密钥对象的底层密钥材料。

对于同一个密钥可以存在多个兼容的密钥规范。例如,可以使用 DSAPublicKeySpecX509EncodedKeySpec 指定 DSA 公钥。密钥工厂可用于兼容密钥规范之间的转换。

以下是一个如何使用密钥工厂根据其编码实例化 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);
 

从以下版本开始:
1.2
另请参见:
Key, PublicKey, PrivateKey, KeySpec, DSAPublicKeySpec, X509EncodedKeySpec

构造方法摘要
protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm)
          创建一个 KeyFactory 对象。
 
方法摘要
 PrivateKey generatePrivate(KeySpec keySpec)
          根据提供的密钥规范(密钥材料)生成私钥对象。
 PublicKey generatePublic(KeySpec keySpec)
          根据提供的密钥规范(密钥材料)生成公钥对象。
 String getAlgorithm()
          获取与此 KeyFactory 关联的算法的名称。
static KeyFactory getInstance(String algorithm)
          返回转换指定算法的 public/private 关键字的 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, Provider provider)
          返回转换指定算法的 public/private 关键字的 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, String provider)
          返回转换指定算法的 public/private 关键字的 KeyFactory 对象。
<T extends KeySpec>
T
getKeySpec(Key key, Class<T> keySpec)
          返回给定密钥对象的规范(密钥材料)。
 Provider getProvider()
          返回此密钥工厂对象的提供者。
 Key translateKey(Key key)
          将提供者可能未知或不受信任的密钥对象转换成此密钥工厂对应的密钥对象。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

KeyFactory

protected KeyFactory(KeyFactorySpi keyFacSpi,
                     Provider provider,
                     String algorithm)
创建一个 KeyFactory 对象。

参数:
keyFacSpi - 代理
provider - 提供者
algorithm - 与此 KeyFactory 关联的算法名称
方法详细信息

getInstance

public static KeyFactory getInstance(String algorithm)
                              throws NoSuchAlgorithmException
返回转换指定算法的 public/private 关键字的 KeyFactory 对象。

此方法从首选 Provider 开始遍历已注册安全提供者列表。返回一个封装 KeyFactorySpi 实现的新 KeyFactory 对象,该实现取自第一个支持指定算法的 Provider。

注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。

参数:
algorithm - 请求密钥算法的名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
返回:
新的 KeyFactory 对象。
抛出:
NoSuchAlgorithmException - 如果没有 Provider 支持指定算法的 KeyFactorySpi 实现。
另请参见:
Provider

getInstance

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 或空。
另请参见:
Provider

getInstance

public static KeyFactory getInstance(String algorithm,
                                     Provider provider)
                              throws NoSuchAlgorithmException
返回转换指定算法的 public/private 关键字的 KeyFactory 对象。

返回一个封装 KeyFactorySpi 实现的新 KeyFactory 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。

参数:
algorithm - 请求密钥算法的名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - 提供者。
返回:
新的 KeyFactory 对象。
抛出:
NoSuchAlgorithmException - 如果不能从指定 Provider 对象获得指定算法的 KeyFactorySpi 实现。
IllegalArgumentException - 如果指定提供者为 null。
从以下版本开始:
1.4
另请参见:
Provider

getProvider

public final Provider getProvider()
返回此密钥工厂对象的提供者。

返回:
此密钥工厂对象的提供者。

getAlgorithm

public final String getAlgorithm()
获取与此 KeyFactory 关联的算法的名称。

返回:
与此 KeyFactory 关联的算法的名称。

generatePublic

public final PublicKey generatePublic(KeySpec keySpec)
                               throws InvalidKeySpecException
根据提供的密钥规范(密钥材料)生成公钥对象。

参数:
keySpec - 公钥的规范(密钥材料)。
返回:
公钥。
抛出:
InvalidKeySpecException - 如果给定的密钥规范不适合此密钥工厂生成公钥。

generatePrivate

public final PrivateKey generatePrivate(KeySpec keySpec)
                                 throws InvalidKeySpecException
根据提供的密钥规范(密钥材料)生成私钥对象。

参数:
keySpec - 私钥的规范(密钥材料)。
返回:
私钥。
抛出:
InvalidKeySpecException - 如果给定的密钥规范不适合此密钥工厂生成私钥。

getKeySpec

public final <T extends KeySpec> T getKeySpec(Key key,
                                              Class<T> keySpec)
                                   throws InvalidKeySpecException
返回给定密钥对象的规范(密钥材料)。 keySpec 标识应接受返回密钥材料的规范类。例如,它可能是 DSAPublicKeySpec.class,指示密钥材料应该返回到 DSAPublicKeySpec 类的一个实例中。

参数:
key - 密钥。
keySpec - 应接受返回密钥材料的规范类。
返回:
请求规范类实例中的底层密钥规范(密钥材料)。
抛出:
InvalidKeySpecException - 如果请求的密钥规范不适合给定密钥,或无法处理给定密钥(例如,给定密钥具有不能识别的算法或格式)。

translateKey

public final Key translateKey(Key key)
                       throws InvalidKeyException
将提供者可能未知或不受信任的密钥对象转换成此密钥工厂对应的密钥对象。

参数:
key - 提供者未知或不受信任的密钥对象。
返回:
已转换的密钥。
抛出:
InvalidKeyException - 如果此密钥工厂无法处理给定密钥。