模块  java.base
软件包  java.security

Class 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); 

    需要Java平台的每个实现都支持以下标准KeyFactory算法:

    • DiffieHellman
    • DSA
    • RSA
    这些算法在Java安全标准算法名称规范的KeyFactory section中描述。 请参阅实现的发行文档,以了解是否支持任何其他算法。
    从以下版本开始:
    1.2
    另请参见:
    KeyPublicKeyPrivateKeyKeySpecDSAPublicKeySpecX509EncodedKeySpec
    • 构造方法详细信息

      • 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 - 如果 algorithmnull
        另请参见:
        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 - 如果此密钥工厂无法处理给定密钥。