- java.lang.Object
-
- java.security.SignatureSpi
-
- java.security.Signature
-
public abstract class Signature extends SignatureSpi
Signature类用于为应用程序提供数字签名算法的功能。 数字签名用于数字数据的认证和完整性保证。签名算法可以是使用DSA和SHA-256的NIST标准DSA。 使用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
- 初始化,使用其中之一
-
-
字段汇总
字段 变量和类型 字段 描述 protected static int
SIGN
可能的值为state
,表示此签名对象已初始化以进行签名。protected int
state
此签名对象的当前状态。protected static int
UNINITIALIZED
可能的值为state
,表示此签名对象尚未初始化。protected static int
VERIFY
可能的值为state
,表示此签名对象已初始化以进行验证。-
声明的属性在类 java.security.SignatureSpi
appRandom
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 Object
clone()
如果实现是可复制的,则返回克隆。String
getAlgorithm()
返回此签名对象的算法名称。static Signature
getInstance(String algorithm)
返回实现指定签名算法的Signature对象。static Signature
getInstance(String algorithm, String provider)
返回实现指定签名算法的Signature对象。static Signature
getInstance(String algorithm, Provider provider)
返回实现指定签名算法的Signature对象。Object
getParameter(String param)
已过时。AlgorithmParameters
getParameters()
返回与此签名对象一起使用的参数。Provider
getProvider()
返回此签名对象的提供者。void
initSign(PrivateKey privateKey)
初始化此对象以进行签名。void
initSign(PrivateKey privateKey, SecureRandom random)
初始化此对象以进行签名。void
initVerify(Certificate certificate)
使用给定证书中的公钥初始化此对象以进行验证。void
initVerify(PublicKey publicKey)
初始化此对象以进行验证。void
setParameter(String param, Object value)
已过时。使用setParameter
。void
setParameter(AlgorithmParameterSpec params)
使用指定的参数集初始化此签名引擎。byte[]
sign()
返回更新的所有数据的签名字节。int
sign(byte[] outbuf, int offset, int len)
完成签名操作并将生成的签名字节存储在提供的缓冲区outbuf
,从offset
开始。String
toString()
返回此签名对象的字符串表示形式,提供包含对象状态和所用算法名称的信息。void
update(byte b)
更新要由字节签名或验证的数据。void
update(byte[] data)
使用指定的字节数组更新要签名或验证的数据。void
update(byte[] data, int off, int len)
使用指定的字节数组从指定的偏移量开始更新要签名或验证的数据。void
update(ByteBuffer data)
使用指定的ByteBuffer更新要签名或验证的数据。boolean
verify(byte[] signature)
验证传入的签名。boolean
verify(byte[] signature, int offset, int length)
从指定的偏移量开始,验证指定字节数组中的传入签名。
-
-
-
构造方法详细信息
-
Signature
protected Signature(String algorithm)
为指定的算法创建Signature对象。- 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。
-
-
方法详细信息
-
getInstance
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定签名算法的Signature对象。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回一个新的Signature对象,该对象封装来自第一个支持指定算法的Provider的SignatureSpi实现。
请注意,可以通过
Security.getProviders()
方法检索已注册提供商的列表。- Implementation Note:
-
JDK Reference Implementation还使用
jdk.security.provider.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()
返回的提供程序顺序不同。 - 参数
-
algorithm
- 请求的算法的标准名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。 - 结果
-
新的
Signature
对象 - 异常
-
NoSuchAlgorithmException
- 如果没有Provider
支持指定算法的Signature
实现 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回实现指定签名算法的Signature对象。将返回一个新的Signature对象,该对象封装来自指定提供程序的SignatureSpi实现。 必须在安全提供程序列表中注册指定的提供程序。
请注意,可以通过
Security.getProviders()
方法检索已注册提供程序的列表。- 参数
-
algorithm
- 请求的算法的名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。 -
provider
- 提供者的名称。 - 结果
-
新的
Signature
对象 - 异常
-
IllegalArgumentException
- 如果提供程序名称为null
或为空 -
NoSuchAlgorithmException
- 如果指定提供程序的指定算法的SignatureSpi
实现不可用 -
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException
- 如果algorithm
是null
- 另请参见:
-
Provider
-
getInstance
public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回实现指定签名算法的Signature对象。将返回一个新的Signature对象,该对象将封装来自指定Provider对象的SignatureSpi实现。 请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数
-
algorithm
- 请求的算法的名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。 -
provider
- 提供者。 - 结果
-
新的
Signature
对象 - 异常
-
IllegalArgumentException
- 如果提供者是null
-
NoSuchAlgorithmException
- 如果指定的算法的SignatureSpi
实现不可用于指定的Provider
对象 -
NullPointerException
- 如果algorithm
是null
- 从以下版本开始:
- 1.4
- 另请参见:
-
Provider
-
getProvider
public final Provider getProvider()
返回此签名对象的提供者。- 结果
- 此签名对象的提供者
-
initVerify
public final void initVerify(PublicKey publicKey) throws InvalidKeyException
初始化此对象以进行验证。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。- 参数
-
publicKey
- 将验证其签名的身份的公钥。 - 异常
-
InvalidKeyException
- 如果密钥无效。
-
initVerify
public final void initVerify(Certificate certificate) throws InvalidKeyException
使用给定证书中的公钥初始化此对象以进行验证。如果证书的类型为X.509并且密钥用法扩展字段标记为严重,则密钥用法扩展字段的值意味着证书中的公钥及其对应的私钥不应用于数字签名,
InvalidKeyException
被抛出。- 参数
-
certificate
- 将验证其签名的身份证书。 - 异常
-
InvalidKeyException
- 如果证书中的公钥未正确编码或不包含必需的参数信息或不能用于数字签名目的。 - 从以下版本开始:
- 1.3
-
initSign
public final void initSign(PrivateKey privateKey) throws InvalidKeyException
初始化此对象以进行签名。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。- 参数
-
privateKey
- 将生成其签名的标识的私钥。 - 异常
-
InvalidKeyException
- 如果密钥无效。
-
initSign
public final void initSign(PrivateKey privateKey, SecureRandom random) throws InvalidKeyException
初始化此对象以进行签名。 如果使用不同的参数再次调用此方法,则会否定此调用的效果。- 参数
-
privateKey
- 将生成其签名的标识的私钥。 -
random
- 此签名的随机源。 - 异常
-
InvalidKeyException
- 如果密钥无效。
-
sign
public final byte[] sign() throws SignatureException
返回更新的所有数据的签名字节。 签名的格式取决于底层签名方案。对此方法的调用会将此签名对象重置为之前通过调用
initSign(PrivateKey)
进行签名初始化时initSign(PrivateKey)
。 也就是说,如果需要,通过对update
和sign
新调用,对象被重置并可用于从同一签名者生成另一个签名。- 结果
- 签名操作结果的签名字节。
- 异常
-
SignatureException
- 如果未正确初始化此签名对象,或者此签名算法无法处理提供的输入数据。
-
sign
public final int sign(byte[] outbuf, int offset, int len) throws SignatureException
完成签名操作并将生成的签名字节存储在提供的缓冲区outbuf
,从offset
开始。 签名的格式取决于底层签名方案。此签名对象将重置为其初始状态(调用其中一个
initSign
方法后所处的状态),并且可以重复使用以生成具有相同私钥的其他签名。- 参数
-
outbuf
- 签名结果的缓冲区。 -
offset
- 偏移到存储签名的outbuf
。 -
len
- 为签名分配的outbuf
的字节数。 - 结果
-
放入
outbuf
的字节数。 - 异常
-
SignatureException
- 如果此签名对象未正确初始化,如果此签名算法无法处理提供的输入数据,或者len
小于实际签名长度。 -
IllegalArgumentException
-如果outbuf
是null
,或offset
或len
小于0,或总和offset
和len
比的长度大outbuf
。 - 从以下版本开始:
- 1.2
-
verify
public final boolean verify(byte[] signature) throws SignatureException
验证传入的签名。对此方法的调用会将此签名对象重置为之前通过调用
initVerify(PublicKey)
初始化以进行验证时initVerify(PublicKey)
。 也就是说,该对象被重置并可用于验证来自在initVerify
的调用中指定了其公钥的标识的另一个签名。- 参数
-
signature
- 要验证的签名字节。 - 结果
- 如果签名已经过验证,则为true,否则为false。
- 异常
-
SignatureException
- 如果此签名对象未正确初始化,则传入的签名编码不正确或类型错误,如果此签名算法无法处理提供的输入数据等。
-
verify
public final boolean verify(byte[] signature, int offset, int length) throws SignatureException
从指定的偏移量开始,验证指定字节数组中的传入签名。对此方法的调用会将此签名对象重置为之前通过调用
initVerify(PublicKey)
初始化以进行验证时initVerify(PublicKey)
。 也就是说,对象被重置并可用于验证来自在initVerify
的调用中指定了其公钥的标识的另一个签名。- 参数
-
signature
- 要验证的签名字节。 -
offset
- 从字节数组开始的偏移量。 -
length
- 从偏移量开始使用的字节数。 - 结果
- 如果签名已经过验证,则为true,否则为false。
- 异常
-
SignatureException
- 如果此签名对象未正确初始化,则传入的签名编码不正确或类型错误,如果此签名算法无法处理提供的输入数据等。 -
IllegalArgumentException
- 如果signature
字节数组是null
,或者offset
或length
小于0,或者offset
和length
的总和大于signature
字节数组的长度。 - 从以下版本开始:
- 1.4
-
update
public final void update(byte b) throws SignatureException
更新要由字节签名或验证的数据。- 参数
-
b
- 用于更新的字节。 - 异常
-
SignatureException
- 如果未正确初始化此签名对象。
-
update
public final void update(byte[] data) throws SignatureException
使用指定的字节数组更新要签名或验证的数据。- 参数
-
data
- 用于更新的字节数组。 - 异常
-
SignatureException
- 如果未正确初始化此签名对象。
-
update
public final void update(byte[] data, int off, int len) throws SignatureException
使用指定的字节数组从指定的偏移量开始更新要签名或验证的数据。- 参数
-
data
- 字节数组。 -
off
- 从字节数组开始的偏移量。 -
len
- 从offset开始使用的字节数。 - 异常
-
SignatureException
- 如果未正确初始化此签名对象。 -
IllegalArgumentException
-如果data
是null
,或off
或len
小于0,或总和off
和len
比的长度大data
。
-
update
public final void update(ByteBuffer data) throws SignatureException
使用指定的ByteBuffer更新要签名或验证的数据。 处理data.remaining()
字节,从data.position()
开始。 返回时,缓冲区的位置将等于其限制; 它的限制不会改变。- 参数
-
data
- ByteBuffer - 异常
-
SignatureException
- 如果未正确初始化此签名对象。 - 从以下版本开始:
- 1.5
-
getAlgorithm
public final String getAlgorithm()
返回此签名对象的算法名称。- 结果
- 此签名对象的算法名称。
-
toString
public String toString()
返回此签名对象的字符串表示形式,提供包含对象状态和所用算法名称的信息。
-
setParameter
@Deprecated public final void setParameter(String param, Object value) throws InvalidParameterException
Deprecated.UsesetParameter
.将指定的算法参数设置为指定的值。 该方法提供了一种通用机制,通过该机制可以设置该对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小,或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 每个参数的统一算法特定命名方案是可取的,但此时未指定。- 参数
-
param
- 参数的字符串标识符。 -
value
- 参数值。 - 异常
-
InvalidParameterException
- 如果param
是此签名算法引擎的无效参数,则该参数已设置且无法再次设置,发生安全性异常,依此类推。 - 另请参见:
-
getParameter(java.lang.String)
-
setParameter
public final void setParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException
使用指定的参数集初始化此签名引擎。- 参数
-
params
- 参数 - 异常
-
InvalidAlgorithmParameterException
- 如果给定参数不适合此签名引擎 - 另请参见:
-
getParameters()
-
getParameters
public final AlgorithmParameters getParameters()
返回与此签名对象一起使用的参数。如果此签名先前已使用参数初始化(通过调用
setParameter
方法),则此方法返回相同的参数。 如果此签名尚未使用参数初始化,则此方法可能会返回默认和随机生成的参数值的组合(如果基础签名实现支持它并且可以成功生成它们)。 否则,返回null
。- 结果
-
与此签名一起使用的参数,或
null
- 从以下版本开始:
- 1.4
- 另请参见:
-
setParameter(AlgorithmParameterSpec)
-
getParameter
@Deprecated public final Object getParameter(String param) throws InvalidParameterException
Deprecated.获取指定算法参数的值。 该方法提供了一种通用机制,通过该机制可以获得该对象的各种参数。 参数可以是算法的任何可设置参数,例如参数大小,或用于签名生成的随机比特源(如果适当的话),或者是否执行特定但可选的计算的指示。 每个参数的统一算法特定命名方案是可取的,但此时未指定。- 参数
-
param
- 参数的字符串名称。 - 结果
-
表示参数值的对象,如果没有,
null
。 - 异常
-
InvalidParameterException
- 如果param
是此引擎的无效参数,或者在尝试获取此参数时发生另一个异常。 - 另请参见:
-
setParameter(String, Object)
-
clone
public Object clone() throws CloneNotSupportedException
如果实现是可复制的,则返回克隆。- 重写:
-
clone
在类SignatureSpi
- 结果
- 如果实现是可复制的,则为克隆。
- 异常
-
CloneNotSupportedException
- 如果在不支持Cloneable
的实现上调用此方法。 - 另请参见:
-
Cloneable
-
-