java.security
类 Signature
java.lang.Object
java.security.SignatureSpi
java.security.Signature
public abstract class Signatureextends SignatureSpi
此 Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。
在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法指定为 SHA1withDSA。如果使用 RSA,对消息摘要算法则会有多种选择,因此,可以将签名算法指定为 MD2withRSA、MD5withRSA 或 SHA1withRSA。因为没有默认的算法名称,所以必须为其指定名称。
Signature 对象可用来生成和验证数字签名。
使用 Signature 对象签名数据或验证签名包括以下三个阶段:
- 初始化,使用
- 初始化验证签名的公钥(请参见 initVerify),或使用
- 初始化签署签名的私钥(也可以选择“安全随机数生成器”),(请参见 initSign(PrivateKey) 和 initSign(PrivateKey, SecureRandom))。
- 更新
根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。
- 签署或验证所有更新字节的签名。请参见 sign 方法和 verify 方法。
注意,由于历史原因,此类是从 SignatureSpi
中抽象出来的,并进行了扩展。应用程序开发人员只需注意在此 Signature
类中定义的方法即可;超类中的所有方法都是供那些希望提供自己的数字签名算法实现的加密服务提供者使用的。
字段摘要 | |
---|---|
protected static int |
SIGN 可能的 state 值,表示此签名对象已经初始化签名。 |
protected int |
state 此签名对象的当前状态。 |
protected static int |
UNINITIALIZED 可能的 state 值,表示尚未初始化此签名对象。 |
protected static int |
VERIFY 可能的 state 值,表示此签名对象已经初始化验证。 |
从类 java.security.SignatureSpi 继承的字段 |
---|
appRandom |
构造方法摘要 | |
---|---|
protected |
Signature(String algorithm) 创建指定算法的 Signature 对象。 |
方法摘要 | |
---|---|
Object |
clone() 如果此实现可以复制,则返回副本。 |
String |
getAlgorithm() 返回此签名对象的算法名称。 |
static Signature |
getInstance(String algorithm) 返回实现指定签名算法的 Signature 对象。 |
static Signature |
getInstance(String algorithm, Provider provider) 返回实现指定签名算法的 Signature 对象。 |
static Signature |
getInstance(String algorithm, String 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(AlgorithmParameterSpec params) 使用指定的参数集初始化此签名引擎。 |
void |
setParameter(String param, Object value) 已过时。 使用 setParameter 取代。 |
byte[] |
sign() 返回所有已更新数据的签名字节。 |
int |
sign(byte[] outbuf, int offset, int len) 完成签名操作并从 offset 开始,将得到的签名字节存储在提供的缓冲区 outbuf 中。 |
String |
toString() 返回此签名对象的字符串表示形式,以提供包括对象状态和所用算法名称在内的信息。 |
void |
update(byte b) 更新要由字节签名或验证的数据。 |
void |
update(byte[] data) 使用指定的 byte 数组更新要签名或验证的数据。 |
void |
update(byte[] data, int off, int len) 从指定的偏移量开始,使用指定的 byte 数组更新要签名或验证的数据。 |
void |
update(ByteBuffer data) 使用指定的 ByteBuffer 更新要签名或验证的数据。 |
boolean |
verify(byte[] signature) 验证传入的签名。 |
boolean |
verify(byte[] signature, int offset, int length) 从指定的偏移量开始,验证指定的 byte 数组中传入的签名。 |
从类 java.security.SignatureSpi 继承的方法 |
---|
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
UNINITIALIZED
protected static final int UNINITIALIZED
- 可能的 state 值,表示尚未初始化此签名对象。
- 另请参见:
- 常量字段值
SIGN
protected static final int SIGN
- 可能的 state 值,表示此签名对象已经初始化签名。
- 另请参见:
- 常量字段值
VERIFY
protected static final int VERIFY
- 可能的 state 值,表示此签名对象已经初始化验证。
- 另请参见:
- 常量字段值
state
protected int state
- 此签名对象的当前状态。
构造方法详细信息 |
---|
Signature
protected Signature(String algorithm)
- 创建指定算法的 Signature 对象。
- 参数:
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
方法详细信息 |
---|
getInstance
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
- 返回实现指定签名算法的 Signature 对象。
此方法从首选的提供者开始遍历已注册安全提供者列表。返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自第一个支持指定算法的 Provider。
注意,可以通 Security.getProviders() 方法获取已注册提供者列表。
- 参数:
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException
- 如果没有 Provider 支持指定算法的 Signature 实现。- 另请参见:
- Provider
getInstance
public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
- 返回实现指定签名算法的 Signature 对象。
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定提供者。指定的提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders() 方法获取已注册提供者列表。
- 参数:
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。provider
- 提供者的名称。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException
- 如果指定算法的 SignatureSpi 实现不能从指定提供者获得。NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册。IllegalArgumentException
- 如果提供者的名称为 null 或空。- 另请参见:
- Provider
getInstance
public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
- 返回实现指定签名算法的 Signature 对象。
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。
- 参数:
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。provider
- 提供者。- 返回:
- 新 Signature 对象。
- 抛出:
NoSuchAlgorithmException
- 如果指定算法的 SignatureSpi 实现不能从指定提供者对象获得。IllegalArgumentException
- 如果 provider 为 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 类型且具有标记为重要的 key usage 扩展字段,并且 key usage 扩展字段的值暗示着证书中的公钥及其对应的私钥不允许用于数字签名,则抛出
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)
对其初始化时的状态。也就是说,如果需要,通过重新调用update
和sign
,可重新设置对象,并且可以通过它从同一个签署者中生成其他人的签名。 - 返回:
- 签名操作结果的签名字节。
- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化,或者此签名算法不能处理所提供的输入数据。
sign
public final int sign(byte[] outbuf, int offset, int len) throws SignatureException
- 完成签名操作并从
offset
开始,将得到的签名字节存储在提供的缓冲区outbuf
中。签名的格式取决于基础签名方案。此签名对象将被重新设置到其初始状态(对其中的一种
initSign
方法调用之后所处的状态),并且可重新使用此签名对象,用同一个私钥生成将来的签名。 - 参数:
outbuf
- 输出签名结果的缓冲区。offset
- 到存储签名的outbuf
的偏移量。len
-outbuf
中分配给签名的字节数。- 返回:
- 放入
outbuf
中的字节数。 - 抛出:
SignatureException
- 如果此签名对象未得到正确初始化,如果此签名算法无法处理所提供的输入数据,或者len
少于实际签名长度。- 从以下版本开始:
- 1.2
verify
public final boolean verify(byte[] signature) throws SignatureException
- 验证传入的签名。
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用
initVerify(PublicKey)
对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用initVerify
时其公钥所指定的标识中的其他签名。 - 参数:
signature
- 要验证的签名字节。- 返回:
- 如果签名得到验证,则返回 true,否则将返回 false。
- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或类型错误,如果此签名算法不能处理所提供的输入数据等。
verify
public final boolean verify(byte[] signature, int offset, int length) throws SignatureException
- 从指定的偏移量开始,验证指定的 byte 数组中传入的签名。
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用
initVerify(PublicKey)
对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用initVerify
时其公钥所指定的标识中的其他签名。 - 参数:
signature
- 要验证的签名字节。offset
- byte 数组中起始处的偏移量。length
- 要使用的字节数(从偏移量起始处算起)。- 返回:
- 如果签名得到验证,则返回 true,否则将返回 false。
- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或者类型错误,如果此签名算法无法处理所提供的输入数据等。IllegalArgumentException
- 如果signature
byte 数组为 null,或者offset
或length
小于 0,或者offset
与length
的和大于signature
byte 数组的长度。- 从以下版本开始:
- 1.4
update
public final void update(byte b) throws SignatureException
- 更新要由字节签名或验证的数据。
- 参数:
b
- 用于更新的字节。- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化。
update
public final void update(byte[] data) throws SignatureException
- 使用指定的 byte 数组更新要签名或验证的数据。
- 参数:
data
- 用于更新的 byte 数组。- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化。
update
public final void update(byte[] data, int off, int len) throws SignatureException
- 从指定的偏移量开始,使用指定的 byte 数组更新要签名或验证的数据。
- 参数:
data
- byte 数组。off
- 到 byte 数组开始处的偏移量。len
- 要使用的字节数,从偏移量起始处算起。- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化。
update
public final void update(ByteBuffer data) throws SignatureException
- 使用指定的 ByteBuffer 更新要签名或验证的数据。处理从
data.position()
处开始的data.remaining()
字节。返回时,缓冲区的位置将等于其限制;其限制并未改变。 - 参数:
data
- ByteBuffer- 抛出:
SignatureException
- 如果此签名对象未得到正确初始化。- 从以下版本开始:
- 1.5
getAlgorithm
public final String getAlgorithm()
- 返回此签名对象的算法名称。
- 返回:
- 此签名对象的算法名称。
toString
public String toString()
- 返回此签名对象的字符串表示形式,以提供包括对象状态和所用算法名称在内的信息。
- 覆盖:
- 类
Object
中的toString
- 返回:
- 此签名对象的字符串表示形式。
setParameter
@Deprecated
public final void setParameter(String param,
Object value)
throws InvalidParameterException
- 已过时。 使用 setParameter 取代。
- 将指定的算法参数设置为指定的值。此方法提供了一种通用机制,通过它可以设置此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。
- 参数:
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()
- 返回与此签名对象一起使用的参数。
返回的参数可能与用来初始化此签名的参数相同;如果此签名需要算法参数但却未使用任何参数进行初始化,则返回的参数可能会包含由底层签名实现所使用的默认值和随机生成的参数值的组合。
- 返回:
- 用于此签名的参数,如果此签名不使用任何参数,则返回 null。
- 从以下版本开始:
- 1.4
- 另请参见:
- setParameter(AlgorithmParameterSpec)
getParameter
@Deprecated
public final Object getParameter(String param)
throws InvalidParameterException
- 已过时。
- 获取指定的算法参数的值。此方法提供了一种通用机制,通过它能够获取此对象的各种参数。参数可以是算法的任何可设置参数,如参数大小、签名生成的随机源位(如果适当),或者表示是否执行具体但可选的计算。每个参数都需要统一的、特定于算法的命名方案,但此时尚未指定这种方案。
- 参数:
param
- 参数的字符串名称。- 返回:
- 表示参数值的对象,如果没有,则返回 null。
- 抛出:
InvalidParameterException
- 如果param
是此引擎的无效参数,或者尝试获取此参数时出现其他异常。- 另请参见:
- setParameter(String, Object)
clone
public Object clone() throws CloneNotSupportedException
- 如果此实现可以复制,则返回副本。
- 覆盖:
- 类
SignatureSpi
中的clone
- 返回:
- 如果此实现可以复制,则返回一个副本。
- 抛出:
CloneNotSupportedException
- 如果调用一个不支持Cloneable
的实现。- 另请参见:
- Cloneable