- java.lang.Object
-
- java.security.KeyFactory
-
public class KeyFactoryextends Object
关键工厂用于将密钥 (类型为Key
不透明加密密钥)转换为关键规范 (底层密钥材料的透明表示),反之亦然。主要工厂是双向的。 也就是说,它们允许您根据给定的密钥规范(密钥材料)构建不透明的密钥对象,或者以适当的格式检索密钥对象的基础密钥材料。
同一密钥可能存在多个兼容密钥规范。 例如,可以使用
DSAPublicKeySpec
或X509EncodedKeySpec
指定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);
需要Java平台的每个实现都支持以下标准
KeyFactory
算法:-
DiffieHellman
-
DSA
-
RSA
- 从以下版本开始:
- 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, String provider)
返回一个KeyFactory对象,该对象转换指定算法的公钥/私钥。static KeyFactory
getInstance(String algorithm, Provider provider)
返回一个KeyFactory对象,该对象转换指定算法的公钥/私钥。<T extends KeySpec>
TgetKeySpec(Key key, 类<T> keySpec)
返回给定密钥对象的规范(密钥材料)。Provider
getProvider()
返回此密钥工厂对象的提供者。Key
translateKey(Key key)
将提供者可能未知或可能不受信任的密钥对象转换为此密钥工厂的相应密钥对象。
-
-
-
构造方法详细信息
-
KeyFactory
protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm)
创建KeyFactory对象。- 参数
-
keyFacSpi
- 代表 -
provider
- 提供者 -
algorithm
- 与此KeyFactory
关联的算法的名称
-
-
方法详细信息
-
getInstance
public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException
返回一个KeyFactory对象,该对象转换指定算法的公钥/私钥。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回一个新的KeyFactory对象,该对象封装了第一个支持指定算法的Provider的KeyFactorySpi实现。
请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- Implementation Note:
- JDK Reference Implementation还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()
返回的提供商的顺序不同。 - 参数
-
algorithm
- 请求的密钥算法的名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyFactory部分。 - 结果
- 新的
KeyFactory
对象 - 异常
-
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的KeyFactorySpi
实现 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回一个KeyFactory对象,该对象转换指定算法的公钥/私钥。将返回一个新的KeyFactory对象,该对象封装了指定提供程序的KeyFactorySpi实现。 必须在安全提供程序列表中注册指定的提供程序。
请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- 参数
-
algorithm
- 请求的密钥算法的名称。 有关标准算法名称的信息,请参见Java Security Standard Algorithm Names Specification中的KeyFactory部分。 -
provider
- 提供者的名称。 - 结果
- 新的
KeyFactory
对象 - 异常
-
IllegalArgumentException
- 如果提供程序名称为null
或为空 -
NoSuchAlgorithmException
- 如果指定提供程序的指定算法的KeyFactorySpi
实现不可用 -
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static KeyFactory getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回一个KeyFactory对象,该对象转换指定算法的公钥/私钥。将返回一个新的KeyFactory对象,该对象封装了指定Provider对象的KeyFactorySpi实现。 请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数
-
algorithm
- 请求的密钥算法的名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyFactory部分。 -
provider
- 提供者。 - 结果
- 新的
KeyFactory
对象 - 异常
-
IllegalArgumentException
- 如果指定的提供者是null
-
NoSuchAlgorithmException
- 如果指定的算法的KeyFactorySpi
实现不可用于指定的Provider
对象 -
NullPointerException
- 如果algorithm
是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
-keySpec
的规范(密钥材料)。 - 结果
- 私钥。
- 异常
-
InvalidKeySpecException
- 如果给定的密钥规范不适合此密钥工厂生成私钥。
-
getKeySpec
public final <T extends KeySpec> T getKeySpec(Key key, 类<T> keySpec) throws InvalidKeySpecException
返回给定密钥对象的规范(密钥材料)。keySpec
标识应返回密钥材料的规范类。 例如,它可以是DSAPublicKeySpec.class
,以指示应在DSAPublicKeySpec
类的实例中返回密钥材料。- 参数类型
-
T
- 要返回的密钥规范的类型 - 参数
-
key
- 关键。 -
keySpec
- 应返回密钥材料的规范类。 - 结果
- 请求的规范类的实例中的基础密钥规范(密钥材料)。
- 异常
-
InvalidKeySpecException
- 如果所请求的密钥规范不适合给定密钥,或者不能处理给定密钥(例如,给定密钥具有未识别的算法或格式)。
-
translateKey
public final Key translateKey(Key key) throws InvalidKeyException
将提供者可能未知或可能不受信任的密钥对象转换为此密钥工厂的相应密钥对象。- 参数
-
key
- 提供者未知或不可信的密钥。 - 结果
- 翻译的密钥。
- 异常
-
InvalidKeyException
- 如果此密钥工厂无法处理给定密钥。
-
-