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
-
Method Summary
Modifier and TypeMethodDescriptionstatic KeyInfoFactory
返回一个支持默认XML处理机制和表示类型(“DOM”)的KeyInfoFactory
。static KeyInfoFactory
getInstance
(String mechanismType) 返回一个支持指定的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory
。static KeyInfoFactory
getInstance
(String mechanismType, String provider) 返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory
,由指定的提供者提供。static KeyInfoFactory
getInstance
(String mechanismType, Provider provider) 返回一个支持请求的XML处理机制和表示类型(例如:“DOM”)的KeyInfoFactory
,由指定的提供者提供。final String
返回此KeyInfoFactory
支持的XML处理机制和表示类型的类型(例如:“DOM”)。final Provider
返回此KeyInfoFactory
的提供者。abstract URIDereferencer
返回默认用于解引用RetrievalMethod
对象中URI的URIDereferencer
的引用。abstract boolean
isFeatureSupported
(String feature) 指示是否支持指定的特性。abstract KeyInfo
newKeyInfo
(List<? extends XMLStructure> content) 创建包含指定密钥信息类型列表的KeyInfo
。abstract KeyInfo
newKeyInfo
(List<? extends XMLStructure> content, String id) 创建包含指定密钥信息类型列表和可选ID的KeyInfo
。abstract KeyName
newKeyName
(String name) 从指定名称创建一个KeyName
。abstract KeyValue
newKeyValue
(PublicKey key) 从指定的公钥创建一个KeyValue
。abstract PGPData
newPGPData
(byte[] keyId) 从指定的PGP公钥标识符创建一个PGPData
。abstract PGPData
newPGPData
(byte[] keyId, byte[] keyPacket, List<? extends XMLStructure> other) 从指定的PGP公钥标识符、可选密钥材料包和外部元素列表创建一个PGPData
。abstract PGPData
newPGPData
(byte[] keyPacket, List<? extends XMLStructure> other) 从指定的PGP密钥材料包和可选外部元素列表创建一个PGPData
。abstract RetrievalMethod
newRetrievalMethod
(String uri) 从指定的URI创建一个RetrievalMethod
。abstract RetrievalMethod
newRetrievalMethod
(String uri, String type, List<? extends Transform> transforms) 从指定参数创建一个RetrievalMethod
。abstract X509Data
newX509Data
(List<?> content) 创建包含指定X.509内容列表的X509Data
。abstract X509IssuerSerial
newX509IssuerSerial
(String issuerName, BigInteger serialNumber) 从指定的X.500颁发者专有名称和序列号创建一个X509IssuerSerial
。abstract KeyInfo
unmarshalKeyInfo
(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.preferred
Security
属性来确定指定算法的首选提供者顺序。这可能与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.preferred
Security
属性来确定指定算法的首选提供者顺序。这可能与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
- 如果在解组过程中发生不可恢复的异常
-