Module  java.base
软件包  java.security

Class KeyFactory



  • public class KeyFactory
    extends Object
    主要工厂用于将Key型的不透明加密密钥)转换为密钥规范 (基础密钥材料的透明表示),反之亦然。

    主要工厂是双向的。 也就是说,它们允许您从给定的密钥规范(密钥材料)构建一个不透明的密钥对象,或以合适的格式检索密钥对象的基础密钥材料。

    同一个密钥可能存在多个兼容的密钥规范。 例如,可以使用DSAPublicKeySpecX509EncodedKeySpec指定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
    这些算法在Java Security Standard算法名称规范的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对象,它转换指定算法的公钥/私钥。

        此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装KeyFactorySpi实现的新KeyFactory对象。

        请注意,可以通过Security.getProviders()方法检索已注册提供商的列表。

        Implementation Note:
        JDK参考实现另外使用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,
                                                      Class<T> keySpec)
                                               throws InvalidKeySpecException
        返回给定键对象的规范(关键材料)。 keySpec标识应该返回密钥材料的规范类。 例如,它可以是DSAPublicKeySpec.class ,以表明在DSAPublicKeySpec类的实例中应该返回密钥材料。
        参数类型
        T - 要返回的密钥规范的类型
        参数
        key - 关键。
        keySpec - 应该返回密钥材料的规范类。
        结果
        在所请求的规范类的实例中的基础密钥规范(密钥材料)。
        异常
        InvalidKeySpecException - 如果所请求的密钥规范不适用于给定的密钥,或给定的密钥不能被处理(例如,给定的密钥具有无法识别的算法或格式)。
      • translateKey

        public final Key translateKey​(Key key)
                               throws InvalidKeyException
        将其提供者可能未知或潜在不受信任的关键对象转换为该关键工厂的相应关键对象。
        参数
        key - 提供者未知或不信任的关键。
        结果
        翻译密钥。
        异常
        InvalidKeyException - 如果该密钥工厂无法处理给定的密钥。