JavaTM 2 Platform
Standard Ed. 5.0

java.security
类 KeyFactory

java.lang.Object
  继承者 java.security.KeyFactory

public class KeyFactory
extends Object

密钥工厂是用来将 keysKey 类型的不透明加密密钥)转换成 key 规范(基础密钥材料的透明表示),反之亦然。

密钥工厂是双向的。也就是说,它们允许根据一个给定的密钥规范(密钥材料)来建造一个不透明的密钥对象,或检索以合适格式表示的密钥对象的基础密钥材料。

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

以下是一个如何使用密钥工厂以便根据其编码实例化 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)
          生成实现指定算法的 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, Provider provider)
          为指定提供程序中的指定算法生成 KeyFactory 对象。
static KeyFactory getInstance(String algorithm, String provider)
          为指定提供程序中的指定算法生成 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
生成实现指定算法的 KeyFactory 对象。如果默认的 provider 包提供所请求算法的实现,则返回包含该实现的 KeyFactory 的实例。如果默认包中不存在该算法,则搜索其他包。

参数:
algorithm - 所请求密钥算法的名称。有关标准算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference》中的附录 A。
返回:
指定算法的 KeyFactory 对象。
抛出:
NoSuchAlgorithmException - 如果默认的提供程序包中请求的算法不可用,或者搜索到的其他提供程序包都不可用。

getInstance

public static KeyFactory getInstance(String algorithm,
                                     String provider)
                              throws NoSuchAlgorithmException,
                                     NoSuchProviderException
为指定提供程序中的指定算法生成 KeyFactory 对象。

参数:
algorithm - 所请求密钥算法的名称。有关标准算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。
provider - 提供程序的名称。
返回:
指定算法的 KeyFactory 对象。
抛出:
NoSuchAlgorithmException - 如果指定提供程序中的算法不可用。
NoSuchProviderException - 如果尚未配置提供程序。
IllegalArgumentException - 如果提供程序的名称为 null 或空。
另请参见:
Provider

getInstance

public static KeyFactory getInstance(String algorithm,
                                     Provider provider)
                              throws NoSuchAlgorithmException
为指定提供程序中的指定算法生成 KeyFactory 对象。注:provider 不一定都需要注册。

参数:
algorithm - 所请求密钥算法的名称。有关标准算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference》中的附录 A。
provider - 提供程序。
返回:
指定算法的 KeyFactory 对象。
抛出:
NoSuchAlgorithmException - 如果指定提供程序中的算法不可用。
IllegalArgumentException - 如果 provider 为 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 - 如果给定密钥不能被此密钥工厂处理。

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策