Module  java.xml.crypto

Class KeyInfoFactory



  • public abstract class KeyInfoFactory
    extends Object
    从零开始创建KeyInfo对象的工厂,或从相应的XML表示中解组KeyInfo对象。

    KeyInfoFactory每个实例KeyInfoFactory支持特定的XML机制类型。 要创建一个KeyInfoFactory ,请调用静态的getInstance方法之一,传递所需的XML机制类型,例如:

    KeyInfoFactory factory = KeyInfoFactory.getInstance("DOM");

    该工厂生产的对象将基于DOM,并遵守API概述中的DOM Mechanism Requirements部分定义的DOM互操作性要求。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。

    使用Provider机制注册和加载KeyInfoFactory实现。 例如,支持DOM机制的服务提供商将在Provider子类中指定为:

      put("KeyInfoFactory.DOM", "org.example.DOMKeyInfoFactory"); 

    此外,由该工厂创建的XMLStructure s可能包含特定于KeyInfo状态,并不意图重复使用。

    实现必须最低限度地支持默认机制类型:DOM。

    注意,调用者必须使用相同KeyInfoFactory实例创建XMLStructure特定的第KeyInfo对象。 如果来自不同提供商的XMLStructure s或不同的机制类型一起使用,行为是未定义的。

    并发访问

    该类的静态方法保证线程安全。 多个线程可以同时调用此类中定义的静态方法,而不会产生不良影响。

    但是,对于此类定义的非静态方法,这不是真的。 除非特定提供者另有说明,否则需要同时访问单个KeyInfoFactory实例的线程应在KeyInfoFactory同步并提供必要的锁定。 每个操作不同的KeyInfoFactory实例的多个线程不需要同步。

    从以下版本开始:
    1.6
    • 构造方法详细信息

      • KeyInfoFactory

        protected KeyInfoFactory​()
        默认构造函数,用于由子类调用。
    • 方法详细信息

      • getInstance

        public static KeyInfoFactory getInstance​(String mechanismType)
        返回支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory

        该方法使用标准的JCA提供程序查找机制来定位和实例化所需机制类型的实现KeyInfoFactory 它通过注册安全性列表Provider s,从最优选的Provider 返回支持指定机制的第一个Provider新的KeyInfoFactory对象。

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

        Implementation Note:
        JDK参考实现另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。 这可能与由Security.getProviders()返回的提供商的顺序不同。
        参数
        mechanismType - XML处理机制和表示的类型。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。
        结果
        一个新的 KeyInfoFactory
        异常
        NullPointerException - 如果 mechanismTypenull
        NoSuchMechanismException - 如果否 Provider支持指定机制的 KeyInfoFactory实现
        另请参见:
        Provider
      • getInstance

        public static KeyInfoFactory getInstance​(String mechanismType,
                                                 Provider provider)
        返回一个KeyInfoFactory ,它支持由指定的提供者提供的请求的XML处理机制和表示类型(例如:“DOM”)。 请注意,指定的Provider对象不必在提供者列表中注册。
        参数
        mechanismType - XML处理机制和表示的类型。 有关详细信息,请参阅Java Security Standard Algorithm Names文档。
        provider - Provider对象
        结果
        一个新的 KeyInfoFactory
        异常
        NullPointerException - 如果 mechanismTypeprovidernull
        NoSuchMechanismException - 如果指定机制的 KeyInfoFactory实现从指定的 Provider对象不可用
        另请参见:
        Provider
      • getInstance

        public static KeyInfoFactory getInstance​()
        返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory

        该方法使用标准的JCA提供程序查找机制来定位和实例化默认机制类型的一个KeyInfoFactory实现。 它通过注册安全性列表Provider s,从最优选的Provider KeyInfoFactory从第一对象Provider返回支持DOM机制。

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

        Implementation Note:
        JDK参考实现另外使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。
        结果
        一个新的 KeyInfoFactory
        异常
        NoSuchMechanismException - 如果没有 Provider支持DOM机制的 KeyInfoFactory实现
        另请参见:
        Provider
      • getMechanismType

        public final String getMechanismType​()
        返回此 KeyInfoFactory支持的XML处理机制和表示 KeyInfoFactory (例如:“DOM”)
        结果
        KeyInfoFactory支持的XML处理机制类型
      • getProvider

        public final Provider getProvider​()
        返回此 KeyInfoFactory的提供者。
        结果
        这个 KeyInfoFactory的提供者
      • newKeyInfo

        public abstract KeyInfo newKeyInfo​(List<? extends XMLStructure> content,
                                           String id)
        创建一个KeyInfo其中包含指定的关键信息类型和可选标识列表。 id参数表示XML ID属性的值,可用于从其他XML结构引用KeyInfo
        参数
        content - 表示密钥信息类型的一个或多个XMLStructure的列表。 该列表被防御复制以防止后续修改。
        id - XML的值 ID (可能为 null
        结果
        一个 KeyInfo
        异常
        NullPointerException - 如果 contentnull
        IllegalArgumentException - 如果 content为空
        ClassCastException - 如果content包含任何不是XMLStructure类型的条目
      • newKeyName

        public abstract KeyName newKeyName​(String name)
        从指定的名称创建 KeyName
        参数
        name - 标识密钥的名称
        结果
        一个 KeyName
        异常
        NullPointerException - 如果 namenull
      • newPGPData

        public abstract PGPData newPGPData​(byte[] keyId)
        根据指定的PGP公钥标识符创建一个 PGPData
        参数
        keyId - RFC 2440第11.2节中定义的PGP公钥标识符。 克隆阵列以防止后续修改。
        结果
        一个 PGPData
        异常
        NullPointerException - 如果 keyIdnull
        IllegalArgumentException - 如果密钥ID不正确的格式
      • newPGPData

        public abstract PGPData newPGPData​(byte[] keyId,
                                           byte[] keyPacket,
                                           List<? extends XMLStructure> other)
        从指定的PGP公共密钥标识符和可选的密钥材料数据包和外部元素列表创建一个 PGPData
        参数
        keyId - RFC 2440第11.2节中定义的PGP公共密钥标识符。 克隆阵列以防止后续修改。
        keyPacket - RFC 2440第5.5节定义的PGP密钥资料包。 克隆阵列以防止后续修改。 可能是null
        other - 表示来自外部命名空间的元素的XMLStructure s的列表。 该列表被防御复制以防止后续修改。 可能是null或空。
        结果
        一个 PGPData
        异常
        NullPointerException - 如果 keyIdnull
        IllegalArgumentException - 如果keyIdkeyPacket的格式不正确。 对于keyPacket ,检查分组报头的格式,并验证其是否是类型密钥材料的标签。 不检查数据包主体的内容和格式。
        ClassCastException - 如果other包含任何不是XMLStructure类型的条目
      • newPGPData

        public abstract PGPData newPGPData​(byte[] keyPacket,
                                           List<? extends XMLStructure> other)
        从指定的PGP密钥材料数据包和外部元素的可选列表中创建一个 PGPData
        参数
        keyPacket - RFC 2440第5.5节中定义的PGP密钥资料包。 克隆阵列以防止后续修改。
        other - 表示来自外部命名空间的元素的XMLStructure的列表。 该列表被防御复制以防止后续修改。 可能是null或空。
        结果
        一个 PGPData
        异常
        NullPointerException - 如果 keyPacketnull
        IllegalArgumentException - 如果keyPacket不正确的格式。 对于keyPacket ,检查分组报头的格式,并验证其是否是类型密钥材料的标签。 不检查数据包主体的内容和格式。
        ClassCastException - 如果other包含任何不是XMLStructure类型的条目
      • newRetrievalMethod

        public abstract RetrievalMethod newRetrievalMethod​(String uri)
        从指定的URI创建一个 RetrievalMethod
        参数
        uri - 标识要检索的 KeyInfo信息的URI
        结果
        一个 RetrievalMethod
        异常
        NullPointerException - 如果 urinull
        IllegalArgumentException - 如果 uri不符合RFC 2396标准
      • newRetrievalMethod

        public abstract RetrievalMethod newRetrievalMethod​(String uri,
                                                           String type,
                                                           List<? extends Transform> transforms)
        从指定的参数创建一个 RetrievalMethod
        参数
        uri - 标识要检索的 KeyInfo信息的URI
        type -一个URI标识的类型 KeyInfo信息被检索(可以是 null
        transforms -列表Transform秒。 该列表被防御复制以防止后续修改。 可能是null或空。
        结果
        一个 RetrievalMethod
        异常
        NullPointerException - 如果 urinull
        IllegalArgumentException - 如果 uri不符合RFC 2396标准
        ClassCastException - 如果transforms包含任何不是Transform类型的条目
      • newX509Data

        public abstract X509Data newX509Data​(List<?> content)
        创建一个包含指定的X.509内容列表的 X509Data
        参数
        content - 一个或多个X.509内容类型的列表。 有效的类型是String (主题名称), byte[] (受试者密钥ID), X509CertificateX509CRL ,或XMLStructureX509IssuerSerial从外部命名空间的物体或元件)。 主题名称是RFC 2253字符串格式的可分辨名称。 实现必须支持RFC 2253(CN,L,ST,O,OU,C,STREET,DC和UID)中定义的属性类型关键字。 实施可能支持其他关键字。 该列表被防御复制以防止后续修改。
        结果
        一个 X509Data
        异常
        NullPointerException - 如果 contentnull
        IllegalArgumentException - 如果 content为空,或者主题名称不符合RFC 2253或其中一个属性类型关键字未被识别。
        ClassCastException - 如果 content包含任何不属于上述有效类型的条目
      • newX509IssuerSerial

        public abstract X509IssuerSerial newX509IssuerSerial​(String issuerName,
                                                             BigInteger serialNumber)
        从指定的X.500发行人识别名称和序列号创建一个 X509IssuerSerial
        参数
        issuerName - 发行人的RFC 2253字符串格式的可分辨名称。 实现必须支持RFC 2253(CN,L,ST,O,OU,C,STREET,DC和UID)中定义的属性类型关键字。 实施可能支持其他关键字。
        serialNumber - 序列号
        结果
        一个 X509IssuerSerial
        异常
        NullPointerException - 如果 issuerNameserialNumbernull
        IllegalArgumentException - 如果发行者名称不符合RFC 2253或其中一个属性类型关键字未被识别。
      • isFeatureSupported

        public abstract boolean isFeatureSupported​(String feature)
        指示是否支持指定的功能。
        参数
        feature - 功能名称(作为绝对URI)
        结果
        true如果指定的功能被支持,否则为 false
        异常
        NullPointerException - 如果 featurenull
      • getURIDereferencer

        public abstract URIDereferencer getURIDereferencer​()
        返回对URIDereferencer引用,默认情况下,它用于取消引用RetrievalMethod对象中的URI。
        结果
        参考默认的 URIDereferencer