java.lang.Object java.security.KeyFactory
public class KeyFactory
密钥工厂用于将密钥(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);
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 对象。 |
|
|
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 |
构造方法详细信息 |
---|
protected KeyFactory(KeyFactorySpi keyFacSpi, Provider provider, String algorithm)
keyFacSpi
- 代理
provider
- 提供者
algorithm
- 与此
KeyFactory 关联的算法名称
方法详细信息 |
---|
public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException
此方法从首选 Provider 开始遍历已注册安全提供者列表。返回一个封装 KeyFactorySpi 实现的新 KeyFactory 对象,该实现取自第一个支持指定算法的 Provider。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 请求密钥算法的名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
NoSuchAlgorithmException
- 如果没有 Provider 支持指定算法的 KeyFactorySpi 实现。
Provider
public static KeyFactory getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回一个封装 KeyFactorySpi 实现的新 KeyFactory 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 请求密钥算法的名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者的名称。
NoSuchAlgorithmException
- 如果不能从指定提供者获得指定算法的 KeyFactorySpi 实现。
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException
- 如果提供者的名称为 null 或空。
Provider
public static KeyFactory getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回一个封装 KeyFactorySpi 实现的新 KeyFactory 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。
algorithm
- 请求密钥算法的名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者。
NoSuchAlgorithmException
- 如果不能从指定 Provider 对象获得指定算法的 KeyFactorySpi 实现。
IllegalArgumentException
- 如果指定提供者为 null。
Provider
public final Provider getProvider()
public final String getAlgorithm()
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, Class<T> keySpec) throws InvalidKeySpecException
keySpec
标识应接受返回密钥材料的规范类。例如,它可能是
DSAPublicKeySpec.class
,指示密钥材料应该返回到
DSAPublicKeySpec
类的一个实例中。
key
- 密钥。
keySpec
- 应接受返回密钥材料的规范类。
InvalidKeySpecException
- 如果请求的密钥规范不适合给定密钥,或无法处理给定密钥(例如,给定密钥具有不能识别的算法或格式)。
public final Key translateKey(Key key) throws InvalidKeyException
key
- 提供者未知或不受信任的密钥对象。
InvalidKeyException
- 如果此密钥工厂无法处理给定密钥。