Signature
类用于提供数字签名算法的功能。数字签名用于对数字数据进行身份验证和完整性保证。
签名算法可以是NIST标准DSA,使用DSA和SHA-256等。使用SHA-256消息摘要算法的DSA算法可以指定为SHA256withDSA
。在RSA的情况下,签名算法可以指定为,例如,SHA256withRSA
。必须指定算法名称,因为没有默认值。
Signature
对象可用于生成和验证数字签名。
对于使用Signature
对象签署数据或验证签名,有三个阶段:
- 初始化,可以是
- 公钥,用于验证签名(参见
initVerify
),或 - 私钥(可选地使用安全随机数生成器),用于签署签名(参见
initSign(PrivateKey)
和initSign(PrivateKey, SecureRandom)
)。
- 公钥,用于验证签名(参见
- 更新
根据初始化的类型,这将更新要签署或验证的字节。参见
update
方法。 - 对所有更新的字节进行签署或验证签名。参见
sign
方法和verify
方法。
请注意,此类是抽象类,并且出于历史原因扩展自SignatureSpi
。应用程序开发人员应仅注意Signature
类中定义的方法;超类中的所有方法都是为希望提供其自己的数字签名算法实现的加密服务提供者而设计的。
Java平台的每个实现都必须支持以下标准Signature
算法:
SHA1withDSA
SHA256withDSA
SHA1withRSA
SHA256withRSA
- 自版本:
- 1.1
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final int
可能的state
值,表示此Signature
对象已初始化用于签署。protected int
此Signature
对象的当前状态。protected static final int
可能的state
值,表示此Signature
对象尚未初始化。protected static final int
可能的state
值,表示此Signature
对象已初始化用于验证。Fields declared in class java.security.SignatureSpi
appRandom
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionclone()
如果实现可克隆,则返回克隆对象。final String
返回此Signature
对象的算法名称。static Signature
getInstance
(String algorithm) 返回实现指定签名算法的Signature
对象。static Signature
getInstance
(String algorithm, String provider) 返回实现指定签名算法的Signature
对象。static Signature
getInstance
(String algorithm, Provider provider) 返回实现指定签名算法的Signature
对象。final Object
getParameter
(String param) 已弃用。final AlgorithmParameters
返回此Signature
对象使用的参数。final Provider
返回此Signature
对象的提供者。final void
initSign
(PrivateKey privateKey) 初始化此对象以进行签名。final void
initSign
(PrivateKey privateKey, SecureRandom random) 初始化此对象以进行签名。final void
initVerify
(Certificate certificate) 使用给定证书的公钥初始化此对象以进行验证。final void
initVerify
(PublicKey publicKey) 初始化此对象以进行验证。final void
setParameter
(String param, Object value) 已弃用。final void
setParameter
(AlgorithmParameterSpec params) 使用指定的参数值初始化此Signature
对象。final byte[]
sign()
返回所有更新数据的签名字节。final int
sign
(byte[] outbuf, int offset, int len) 完成签名操作,并将生成的签名字节存储在提供的缓冲区outbuf
中,从offset
开始。toString()
返回此Signature
对象的字符串表示形式,提供包括对象状态和使用的算法名称在内的信息。final void
update
(byte b) 通过一个字节更新要签署或验证的数据。final void
update
(byte[] data) 使用指定的字节数组更新要签署或验证的数据。final void
update
(byte[] data, int off, int len) 使用指定的字节数组更新要签署或验证的数据,从指定的偏移量开始。final void
update
(ByteBuffer data) 使用指定的ByteBuffer更新要签署或验证的数据。final boolean
verify
(byte[] signature) 验证传入的签名。final boolean
verify
(byte[] signature, int offset, int length) 验证指定字节数组中从指定偏移量开始的传入签名。Methods declared in class java.security.SignatureSpi
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify
-
Field Details
-
Constructor Details
-
Signature
为指定的算法创建一个Signature
对象。- 参数:
-
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的签名部分。
-
-
Method Details
-
getInstance
返回实现指定签名算法的Signature
对象。此方法遍历已注册的安全提供者列表,从最首选的提供者开始。返回封装了支持指定算法的第一个提供者的
SignatureSpi
实现的新Signature
对象。请注意,已注册提供者列表可以通过
Security.getProviders()
方法检索。- 实现注意:
-
JDK参考实现还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供者顺序。这可能与由Security.getProviders()
返回的提供者顺序不同。 - 参数:
-
algorithm
- 请求的算法的标准名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的签名部分。 - 返回:
-
新的
Signature
对象 - 抛出:
-
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的Signature
实现 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 返回实现指定签名算法的Signature
对象。返回封装了指定提供者的
SignatureSpi
实现的新Signature
对象。指定的提供者必须在安全提供者列表中注册。请注意,已注册提供者列表可以通过
Security.getProviders()
方法检索。- 参数:
-
algorithm
- 请求的算法的名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的签名部分。 -
provider
- 提供者的名称。 - 返回:
-
新的
Signature
对象 - 抛出:
-
IllegalArgumentException
- 如果提供者名称为null
或空 -
NoSuchAlgorithmException
- 如果指定提供者不提供指定算法的SignatureSpi
实现 -
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册 -
NullPointerException
- 如果algorithm
为null
- 参见:
-
getInstance
public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException 返回实现指定签名算法的Signature
对象。返回一个新的
Signature
对象,封装了来自指定提供程序的SignatureSpi
实现。请注意,指定的提供程序不必在提供程序列表中注册。- 参数:
-
algorithm
- 请求的算法名称。有关标准算法名称的信息,请参阅Java安全标准算法名称规范中的Signature部分。 -
provider
- 提供程序。 - 返回:
-
新的
Signature
对象 - 抛出:
-
IllegalArgumentException
- 如果提供程序为null
-
NoSuchAlgorithmException
- 如果指定算法的SignatureSpi
实现不可从指定的Provider
对象获取 -
NullPointerException
- 如果algorithm
为null
- 自从:
- 1.4
- 另请参见:
-
getProvider
返回此Signature
对象的提供程序。- 返回:
-
此
Signature
对象的提供程序
-
initVerify
为验证初始化此对象。如果再次使用不同参数调用此方法,则会取消此调用的效果。- 参数:
-
publicKey
- 要验证签名的身份的公钥。 - 抛出:
-
InvalidKeyException
- 如果密钥无效。
-
initVerify
使用给定证书的公钥初始化此对象以进行验证。如果证书是X.509类型并且具有标记为关键的密钥用途扩展字段,并且密钥用途扩展字段的值暗示证书中的公钥及其对应的私钥不应用于数字签名,则会抛出
InvalidKeyException
。- 参数:
-
certificate
- 要验证签名的身份的证书。 - 抛出:
-
InvalidKeyException
- 如果证书中的公钥未正确编码或不包含所需的参数信息或无法用于数字签名目的。 - 自从:
- 1.3
-
initSign
为签名初始化此对象。如果再次使用不同参数调用此方法,则会取消此调用的效果。- 参数:
-
privateKey
- 要生成签名的身份的私钥。 - 抛出:
-
InvalidKeyException
- 如果密钥无效。
-
initSign
为签名初始化此对象。如果再次使用不同参数调用此方法,则会取消此调用的效果。- 参数:
-
privateKey
- 要生成签名的身份的私钥 -
random
- 用于此Signature
对象的随机源 - 抛出:
-
InvalidKeyException
- 如果密钥无效。
-
sign
返回更新的所有数据的签名字节。签名的格式取决于底层签名方案。调用此方法会将此
Signature
对象重置为之前通过调用initSign(PrivateKey)
进行签名初始化时的状态。也就是说,对象被重置并可用于从相同签名者生成另一个签名,如果需要的话,可以通过对update
和sign
进行新调用。- 返回:
- 签名操作结果的签名字节。
- 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化,或者此签名算法无法处理提供的输入数据。
-
sign
完成签名操作,并将生成的签名字节存储在提供的缓冲区outbuf
中,从offset
开始。签名的格式取决于底层签名方案。此
Signature
对象将重置为其初始状态(即在调用initSign
方法之一后的状态),并可重用以使用相同私钥生成进一步的签名。- 参数:
-
outbuf
- 用于签名结果的缓冲区。 -
offset
- 存储签名的outbuf
中的偏移量。 -
len
- 用于签名的outbuf
中的字节数。 - 返回:
-
放入
outbuf
的字节数。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化,此签名算法无法处理提供的输入数据,或者len
小于实际签名长度。 -
IllegalArgumentException
- 如果outbuf
为null
,或者offset
或len
小于0,或者offset
和len
的总和大于outbuf
的长度。 - 自从:
- 1.2
-
verify
验证传入的签名。调用此方法会将此
Signature
对象重置为之前通过调用initVerify(PublicKey)
进行验证初始化时的状态。也就是说,对象被重置并可用于验证另一个由在调用initVerify
中指定公钥的身份生成的签名。- 参数:
-
signature
- 要验证的签名字节。 - 返回:
-
如果签名已验证,则为
true
,如果未验证,则为false
。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化,传入的签名编码不正确或类型错误,此签名算法无法处理提供的输入数据等。
-
verify
在指定的字节数组中从指定偏移量开始验证传入的签名。调用此方法会将此
Signature
对象重置为之前通过调用initVerify(PublicKey)
进行验证初始化时的状态。也就是说,对象被重置并可用于验证另一个由在调用initVerify
中指定公钥的身份生成的签名。- 参数:
-
signature
- 要验证的签名字节。 -
offset
- 要从字节数组中开始的偏移量。 -
length
- 要使用的字节数,从偏移量开始。 - 返回:
-
如果签名已验证,则为
true
,如果未验证,则为false
。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化,传入的签名编码不正确或类型错误,此签名算法无法处理提供的输入数据等。 -
IllegalArgumentException
- 如果signature
字节数组为null
,或者offset
或length
小于0,或者offset
和length
的总和大于signature
字节数组的长度。 - 自从:
- 1.4
-
update
通过一个字节更新要签名或验证的数据。- 参数:
-
b
- 用于更新的字节。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化。
-
update
使用指定的字节数组更新要签名或验证的数据。- 参数:
-
data
- 用于更新的字节数组。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化。
-
update
使用指定的字节数组从指定偏移量开始更新要签名或验证的数据。- 参数:
-
data
- 字节数组。 -
off
- 要从字节数组中开始的偏移量。 -
len
- 要使用的字节数,从偏移量开始。 - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化。 -
IllegalArgumentException
- 如果data
为null
,或者off
或len
小于0,或者off
和len
的总和大于data
的长度。
-
update
使用指定的ByteBuffer更新要签名或验证的数据。处理从data.position()
开始的data.remaining()
字节。返回时,缓冲区的位置将等于其限制;其限制不会改变。- 参数:
-
data
- ByteBuffer - 抛出:
-
SignatureException
- 如果此Signature
对象未正确初始化。 - 自版本:
- 1.5
-
getAlgorithm
返回此Signature
对象的算法名称。- 返回:
-
此
Signature
对象的算法名称。
-
toString
返回此Signature
对象的字符串表示形式,提供包括对象状态和所使用算法名称在内的信息。 -
setParameter
@Deprecated public final void setParameter(String param, Object value) throws InvalidParameterException Deprecated.UsesetParameter
.将指定算法参数设置为指定值。此方法提供了一种通用机制,通过该机制可以设置此对象的各种参数。参数可以是算法的任何可设置参数,例如参数大小,用于签名生成的随机位源(如果适用),或指示是否执行特定但可选计算的指示。对于每个参数,希望有一个统一的算法特定命名方案,但目前未指定。- 参数:
-
param
- 参数的字符串标识符 -
value
- 参数值 - 抛出:
-
InvalidParameterException
- 如果param
是此Signature
对象的无效参数,参数已设置且无法再次设置,发生安全异常等。 - 参见:
-
setParameter
public final void setParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException 使用指定的参数值初始化此Signature
对象。- 参数:
-
params
- 参数值 - 抛出:
-
InvalidAlgorithmParameterException
- 如果给定的参数值不适用于此Signature
对象 - 参见:
-
getParameters
返回与此Signature
对象一起使用的参数。返回的参数可能与用于初始化此
Signature
对象的参数相同,也可能包含底层签名方案使用的默认或随机参数值。如果未提供所需参数并且可以由Signature
对象生成,则返回生成的参数;否则返回null
。但是,如果签名方案不支持将参数作为
AlgorithmParameters
返回,则始终返回null
。- 返回:
-
与此
Signature
对象一起使用的参数,或null
- 抛出:
-
UnsupportedOperationException
- 如果提供程序不支持此方法 - 自版本:
- 1.4
- 参见:
-
getParameter
Deprecated.获取指定算法参数的值。此方法提供了一种通用机制,通过该机制可以获取此对象的各种参数。参数可以是算法的任何可设置参数,例如参数大小,用于签名生成的随机位源(如果适用),或指示是否执行特定但可选计算的指示。对于每个参数,希望有一个统一的算法特定命名方案,但目前未指定。- 参数:
-
param
- 参数的字符串名称。 - 返回:
-
表示参数值的对象,如果没有则返回
null
。 - 抛出:
-
InvalidParameterException
- 如果此引擎的参数是无效参数,或在尝试获取此参数时发生其他异常。 - 参见:
-
clone
如果实现支持克隆,则返回克隆。- 覆盖:
-
clone
在类SignatureSpi
- 返回:
- 如果实现支持克隆,则返回克隆。
- 抛出:
-
CloneNotSupportedException
- 如果在不支持Cloneable
的实现上调用此方法。 - 参见:
-
setParameter
。