public class KeyFactory extends Object
Key
不透明加密密钥)转换为关键规范 (基础密钥材料的透明表示),反之亦然。
主要工厂是双向的。 也就是说,它们允许您从给定的密钥规范(密钥材料)构建一个不透明的密钥对象,或以合适的格式检索密钥对象的基础密钥。
同一个密钥可能存在多个兼容的密钥规范。 例如,可以使用DSAPublicKeySpec
或X509EncodedKeySpec
指定DSA公开密钥。 一个关键的工厂可用于在兼容的密钥规范之间进行转换。
以下是如何使用密钥工厂以从其编码实例化DSA公钥的示例。 假设爱丽丝收到了鲍勃的数字签名。 鲍勃也把她的公开密钥(编码格式)发给他,以验证他的签名。 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
Key
, PublicKey
, PrivateKey
, KeySpec
, DSAPublicKeySpec
, X509EncodedKeySpec
Modifier | Constructor and Description |
---|---|
protected |
KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm)
创建一个KeyFactory对象。
|
Modifier and Type | Method and Description |
---|---|
PrivateKey |
generatePrivate(KeySpec keySpec)
从提供的密钥规范(密钥材料)生成私钥对象。
|
PublicKey |
generatePublic(KeySpec keySpec)
从提供的密钥规范(密钥材料)生成公钥对象。
|
String |
getAlgorithm()
获取与此相关的
KeyFactory 的名称
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> |
getKeySpec(Key key, 类<T> keySpec)
返回给定键对象的规范(关键材料)。
|
Provider |
getProvider()
返回此关键工厂对象的提供者。
|
Key |
translateKey(Key key)
将其提供者可能未知或潜在不受信任的关键对象转换为该关键工厂的相应关键对象。
|
protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm)
keyFacSpi
- 代表
provider
- 提供商
algorithm
- 与此相关的
KeyFactory
的名称
KeyFactory
public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装KeyFactorySpi实现的新KeyFactory对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- 所请求密钥算法的名称。
看到的的KeyFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
NoSuchAlgorithmException
- 如果没有提供者支持指定算法的KeyFactorySpi实现。
Provider
public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回从指定提供程序封装KeyFactorySpi实现的新KeyFactory对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- 请求的密钥算法的名称。
看到的的KeyFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商的名称。
NoSuchAlgorithmException
- 如果指定算法的KeyFactorySpi实现不能从指定的提供程序获得。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果提供者名称为空或为空。
Provider
public static KeyFactory getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装KeyFactorySpi实现的新KeyFactory对象。 请注意,指定的Provider对象不必在提供者列表中注册。
algorithm
- 所请求密钥算法的名称。
看到的的KeyFactory部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供者。
NoSuchAlgorithmException
- 如果指定的算法的KeyFactorySpi实现从指定的Provider对象不可用。
IllegalArgumentException
- 如果指定的提供程序为空。
Provider
public final Provider getProvider()
public final String getAlgorithm()
KeyFactory
的名称
KeyFactory
。
KeyFactory
的名称
KeyFactory
public final PublicKey generatePublic(KeySpec keySpec) throws InvalidKeySpecException
keySpec
- 公钥的规范(密钥材料)。
InvalidKeySpecException
- 如果给定的密钥规范不适合该密钥工厂生成公钥。
public final PrivateKey generatePrivate(KeySpec keySpec) throws InvalidKeySpecException
keySpec
- 私钥的规范(密钥材料)。
InvalidKeySpecException
- 如果给定的密钥规范不适合该密钥工厂生成私钥。
public final <T extends KeySpec> T getKeySpec(Key key, 类<T> keySpec) throws InvalidKeySpecException
keySpec
标识应该返回密钥材料的规范类。
例如,它可以是DSAPublicKeySpec.class
,以表明在DSAPublicKeySpec
类的实例中应该返回密钥材料。
T
- 要返回的键规范的类型
key
- 关键。
keySpec
- 应该返回密钥材料的规范类。
InvalidKeySpecException
- 如果所请求的密钥规范不适用于给定的密钥,或给定的密钥不能被处理(例如,给定的密钥具有无法识别的算法或格式)。
public final Key translateKey(Key key) throws InvalidKeyException
key
- 提供者未知或不信任的密钥。
InvalidKeyException
- 如果该键工厂无法处理给定的键。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.