KeyInfo对象或从相应的XML表示中解组装一个KeyInfo对象的工厂。
KeyInfoFactory的每个实例支持特定的XML机制类型。要创建一个KeyInfoFactory,请调用其中一个静态的getInstance方法,传入所需的XML机制类型,例如:
KeyInfoFactory factory = KeyInfoFactory.getInstance("DOM");
此工厂生成的对象将基于DOM,并遵守在DOM机制要求中定义的DOM互操作性要求。请参阅Java安全标准算法名称规范中的KeyInfoFactory部分,了解标准机制类型的列表。
KeyInfoFactory实现是通过Provider机制进行注册和加载的。例如,支持DOM机制的服务提供者将在Provider子类中指定为:
put("KeyInfoFactory.DOM", "org.example.DOMKeyInfoFactory");
此外,此工厂创建的XMLStructure可能包含特定于KeyInfo的状态,并且不打算重复使用。
实现必须至少支持默认机制类型:DOM。
请注意,调用者必须使用相同的KeyInfoFactory实例来创建特定KeyInfo对象的XMLStructure。如果使用来自不同提供者或不同机制类型的XMLStructure一起使用,则行为是未定义的。
并发访问
此类的静态方法保证是线程安全的。多个线程可以同时调用此类中定义的静态方法而不会产生任何不良影响。
但是,对于此类定义的非静态方法,情况并非如此。除非特定提供者另有说明,需要同时访问单个KeyInfoFactory实例的线程应在彼此之间同步并提供必要的锁定。每个操作不同KeyInfoFactory实例的多个线程不需要同步。
- 自版本:
- 1.6
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic KeyInfoFactory返回一个支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory。static KeyInfoFactorygetInstance(String mechanismType) 返回一个支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory。static KeyInfoFactorygetInstance(String mechanismType, String provider) 返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory,由指定的提供者提供。static KeyInfoFactorygetInstance(String mechanismType, Provider provider) 返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory,由指定的提供者提供。final String返回此KeyInfoFactory支持的XML处理机制和表示类型的类型(例如:“DOM”)。final Provider返回此KeyInfoFactory的提供者。abstract URIDereferencer返回默认用于解引用RetrievalMethod对象中URI的URIDereferencer的引用。abstract booleanisFeatureSupported(String feature) 指示是否支持指定的特性。abstract KeyInfonewKeyInfo(List<? extends XMLStructure> content) 创建包含指定密钥信息类型列表的KeyInfo。abstract KeyInfonewKeyInfo(List<? extends XMLStructure> content, String id) 创建包含指定密钥信息类型列表和可选ID的KeyInfo。abstract KeyNamenewKeyName(String name) 从指定名称创建一个KeyName。abstract KeyValuenewKeyValue(PublicKey key) 从指定的公钥创建一个KeyValue。abstract PGPDatanewPGPData(byte[] keyId) 从指定的PGP公钥标识符创建一个PGPData。abstract PGPDatanewPGPData(byte[] keyId, byte[] keyPacket, List<? extends XMLStructure> other) 从指定的PGP公钥标识符、可选密钥材料包和外部元素列表创建一个PGPData。abstract PGPDatanewPGPData(byte[] keyPacket, List<? extends XMLStructure> other) 从指定的PGP密钥材料包和可选外部元素列表创建一个PGPData。abstract RetrievalMethodnewRetrievalMethod(String uri) 从指定的URI创建一个RetrievalMethod。abstract RetrievalMethodnewRetrievalMethod(String uri, String type, List<? extends Transform> transforms) 从指定参数创建一个RetrievalMethod。abstract X509DatanewX509Data(List<?> content) 创建包含指定X.509内容列表的X509Data。abstract X509IssuerSerialnewX509IssuerSerial(String issuerName, BigInteger serialNumber) 从指定的X.500颁发者专有名称和序列号创建一个X509IssuerSerial。abstract KeyInfounmarshalKeyInfo(XMLStructure xmlStructure)
-
Constructor Details
-
KeyInfoFactory
protected KeyInfoFactory()默认构造函数,供子类调用。
-
-
Method Details
-
getInstance
返回一个支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory。此方法使用标准的JCA提供者查找机制来定位和实例化所需机制类型的
KeyInfoFactory实现。它遍历注册的安全Provider列表,从最优先的Provider开始。将返回第一个支持指定机制的Provider的新KeyInfoFactory对象。请注意,注册的提供者列表可以通过
Security.getProviders()方法检索。- 实现说明:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。这可能与Security.getProviders()返回的提供者顺序不同。 - 参数:
-
mechanismType- XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的KeyInfoFactory部分,了解标准机制类型的列表。 - 返回:
-
一个新的
KeyInfoFactory - 抛出:
-
NullPointerException- 如果mechanismType为null -
NoSuchMechanismException- 如果没有Provider支持指定机制的KeyInfoFactory实现 - 参见:
-
getInstance
返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory,由指定的提供者提供。请注意,指定的Provider对象不必在提供者列表中注册。- 参数:
-
mechanismType- XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的KeyInfoFactory部分,了解标准机制类型的列表。 -
provider-Provider对象 - 返回:
-
一个新的
KeyInfoFactory - 抛出:
-
NullPointerException- 如果mechanismType或provider为null -
NoSuchMechanismException- 如果指定的Provider对象中没有可用于指定机制的KeyInfoFactory实现 - 参见:
-
getInstance
public static KeyInfoFactory getInstance(String mechanismType, String provider) throws NoSuchProviderException 返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory,由指定的提供者提供。指定的提供者必须在安全提供者列表中注册。请注意,注册的提供者列表可以通过
Security.getProviders()方法检索。- 参数:
-
mechanismType- XML处理机制和表示类型。请参阅Java安全标准算法名称规范中的KeyInfoFactory部分,获取标准机制类型列表。 -
provider- 提供者的字符串名称 - 返回:
-
一个新的
KeyInfoFactory - 抛出:
-
NoSuchProviderException- 如果指定的提供者未在安全提供者列表中注册 -
NullPointerException- 如果mechanismType或provider为null -
NoSuchMechanismException- 如果指定机制的KeyInfoFactory实现不可从指定提供者获取 - 参见:
-
getInstance
返回支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory。此方法使用标准JCA提供者查找机制来定位和实例化默认机制类型的
KeyInfoFactory实现。它遍历已注册的安全Provider列表,从最首选的Provider开始。返回来自支持DOM机制的第一个Provider的新KeyInfoFactory对象。请注意,已注册提供者列表可以通过
Security.getProviders()方法检索。- 实现注意:
-
JDK参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。这可能与Security.getProviders()返回的提供者顺序不同。 - 返回:
-
一个新的
KeyInfoFactory - 抛出:
-
NoSuchMechanismException- 如果没有Provider支持DOM机制的KeyInfoFactory实现 - 参见:
-
getMechanismType
返回此KeyInfoFactory支持的XML处理机制和表示类型(例如:"DOM")- 返回:
-
此
KeyInfoFactory支持的XML处理机制类型
-
getProvider
返回此KeyInfoFactory的提供者。- 返回:
-
此
KeyInfoFactory的提供者
-
newKeyInfo
创建包含指定密钥信息类型列表的KeyInfo。- 参数:
-
content- 代表密钥信息类型的一个或多个XMLStructure列表。列表进行防御性复制,以防止后续修改。 - 返回:
-
一个
KeyInfo - 抛出:
-
NullPointerException- 如果content为null -
IllegalArgumentException- 如果content为空 -
ClassCastException- 如果content包含任何不属于XMLStructure类型的条目
-
newKeyInfo
创建包含指定密钥信息类型列表和可选ID的KeyInfo。id参数表示XMLID属性的值,可用于从其他XML结构引用KeyInfo。- 参数:
-
content- 代表密钥信息类型的一个或多个XMLStructure列表。列表进行防御性复制,以防止后续修改。 -
id- XMLID的值(可能为null) - 返回:
-
一个
KeyInfo - 抛出:
-
NullPointerException- 如果content为null -
IllegalArgumentException- 如果content为空 -
ClassCastException- 如果content包含任何不属于XMLStructure类型的条目
-
newKeyName
从指定名称创建一个KeyName。- 参数:
-
name- 标识密钥的名称 - 返回:
-
一个
KeyName - 抛出:
-
NullPointerException- 如果name为null
-
newKeyValue
从指定的公钥创建一个KeyValue。- 参数:
-
key- 公钥 - 返回:
-
一个
KeyValue - 抛出:
-
KeyException- 如果key的算法未被此KeyInfoFactory识别或支持 -
NullPointerException- 如果key为null
-
newPGPData
从指定的PGP公钥标识符创建一个PGPData。- 参数:
-
keyId- 在RFC 2440第11.2节中定义的PGP公钥标识符。数组进行克隆以防止后续修改。 - 返回:
-
一个
PGPData - 抛出:
-
NullPointerException- 如果keyId为null -
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或空。 - 返回:
-
一个
PGPData - 抛出:
-
NullPointerException- 如果keyId为null -
IllegalArgumentException- 如果keyId或keyPacket格式不正确。对于keyPacket,检查数据包头的格式并验证标签是否为密钥材料类型。不检查数据包主体的内容和格式。 -
ClassCastException- 如果other包含任何不属于XMLStructure类型的条目
-
newPGPData
从指定的PGP密钥材料数据包和可选外部元素列表创建一个PGPData。- 参数:
-
keyPacket- 在RFC 2440第5.5节中定义的PGP密钥材料数据包。数组会被克隆以防止后续修改。 -
other- 代表来自外部命名空间的元素的XMLStructure列表。列表会被防御性地复制以防止后续修改。可能为null或空。 - 返回:
-
一个
PGPData - 抛出:
-
NullPointerException- 如果keyPacket为null -
IllegalArgumentException- 如果keyPacket不符合正确的格式。对于keyPacket,会检查数据包头的格式并验证标签是否为密钥材料类型。不会检查数据包主体的内容和格式。 -
ClassCastException- 如果other包含任何不属于XMLStructure类型的条目
-
newRetrievalMethod
从指定的URI创建一个RetrievalMethod。- 参数:
-
uri- 标识要检索的KeyInfo信息的URI - 返回:
-
一个
RetrievalMethod - 抛出:
-
NullPointerException- 如果uri为null -
IllegalArgumentException- 如果uri不符合RFC 2396标准
-
newRetrievalMethod
public abstract RetrievalMethod newRetrievalMethod(String uri, String type, List<? extends Transform> transforms) 从指定参数创建一个RetrievalMethod。- 参数:
-
uri- 标识要检索的KeyInfo信息的URI -
type- 标识要检索的KeyInfo信息类型的URI(可能为null) -
transforms- 一个Transform列表。列表会被防御性地复制以防止后续修改。可能为null或空。 - 返回:
-
一个
RetrievalMethod - 抛出:
-
NullPointerException- 如果uri为null -
IllegalArgumentException- 如果uri不符合RFC 2396标准 -
ClassCastException- 如果transforms包含任何不属于Transform类型的条目
-
newX509Data
包含指定X.509内容列表的X509Data。- 参数:
-
content- 一个或多个X.509内容类型的列表。有效类型包括String(主题名称)、byte[](主题密钥标识)、X509Certificate、X509CRL或XMLStructure(X509IssuerSerial对象或来自外部命名空间的元素)。主题名称是RFC 2253字符串格式的可分辨名称。实现必须支持RFC 2253中定义的属性类型关键字(CN、L、ST、O、OU、C、STREET、DC和UID)。实现可以支持额外的关键字。列表会被防御性地复制以防止后续修改。 - 返回:
-
一个
X509Data - 抛出:
-
NullPointerException- 如果content为null -
IllegalArgumentException- 如果content为空,或者主题名称不符合RFC 2253标准或其中一个属性类型关键字不被识别。 -
ClassCastException- 如果content包含任何不属于上述有效类型的条目
-
newX509IssuerSerial
从指定的X.500颁发者可分辨名称和序列号创建一个X509IssuerSerial。- 参数:
-
issuerName- 颁发者的RFC 2253字符串格式的可分辨名称。实现必须支持RFC 2253中定义的属性类型关键字(CN、L、ST、O、OU、C、STREET、DC和UID)。实现可以支持额外的关键字。 -
serialNumber- 序列号 - 返回:
-
一个
X509IssuerSerial - 抛出:
-
NullPointerException- 如果issuerName或serialNumber为null -
IllegalArgumentException- 如果颁发者名称不符合RFC 2253标准或其中一个属性类型关键字不被识别。
-
isFeatureSupported
指示是否支持指定的特性。- 参数:
-
feature- 特性名称(作为绝对URI) - 返回:
-
如果支持指定的特性则返回
true,否则返回false - 抛出:
-
NullPointerException- 如果feature为null
-
getURIDereferencer
返回默认用于解除RetrievalMethod对象中URI引用的URIDereferencer的引用。- 返回:
-
默认
URIDereferencer的引用
-
unmarshalKeyInfo
- 参数:
-
xmlStructure- 从中解组密钥信息的特定机制的XML结构 - 返回:
-
KeyInfo - 抛出:
-
NullPointerException- 如果xmlStructure为null -
ClassCastException- 如果xmlStructure的类型不适合此工厂 -
MarshalException- 如果在解组过程中发生不可恢复的异常
-