模块  java.xml.crypto

Class KeyInfoFactory


  • public abstract class KeyInfoFactory
    extends Object
    从头开始创建KeyInfo对象或从相应的XML表示中解组KeyInfo对象的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可能包含特定于KeyInfo状态,并且不可重复使用。

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

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

    并发访问

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

    但是,对于此类定义的非静态方法,情况并非如此。 除非特定提供程序另有说明,否则需要同时访问单个KeyInfoFactory实例的线程应在它们之间进行同步并提供必要的锁定。 每个操作不同KeyInfoFactory实例的多个线程无需同步。

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

      • KeyInfoFactory

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

      • getInstance

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

        此方法使用标准的JCA提供查找机制来查找并实例化KeyInfoFactory实现期望的机构的类型。 它遍历注册安全列表Provider s,从最受欢迎的Provider 一个新的KeyInfoFactory从第一对象Provider返回的支持指定的机构。

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

        Implementation Note:
        JDK Reference Implementation还使用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来自第一个支持DOM机制的第一个Provider新对象Provider

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

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

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

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

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

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

        public abstract PGPData newPGPData​(byte[] keyId)
        根据指定的PGP公钥标识符创建 PGPData
        参数
        keyId - RFC 2440 ,第11.2节中定义的PGP公钥标识符。 克隆该阵列以防止后续修改。
        结果
        a 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的列表。 该列表是防御性复制的,以防止后续修改。 可能是null或为空。
        结果
        a 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或为空。
        结果
        a PGPData
        异常
        NullPointerException - 如果 keyPacketnull
        IllegalArgumentException - 如果keyPacket格式不正确。 对于keyPacket ,将检查数据包标头的格式,并验证标签是否为密钥材料类型。 不检查包体的内容和格式。
        ClassCastException - 如果other包含任何类型不是的条目XMLStructure
      • newRetrievalMethod

        public abstract RetrievalMethod newRetrievalMethod​(String uri,
                                                           String type,
                                                           List<? extends Transform> transforms)
        根据指定的参数创建 RetrievalMethod
        参数
        uri - 标识要检索的 KeyInfo信息的URI
        type - 标识要检索的 KeyInfo信息类型的URI(可能是 null
        transforms -列表Transform秒。 该列表是防御性复制的,以防止后续修改。 可能是null或空。
        结果
        a 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)中定义的属性类型关键字。 实现可以支持其他关键字。 该列表是防御性复制的,以防止后续修改。
        结果
        a 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的引用