java.lang.Object java.security.SignatureSpi java.security.Signature
public abstract class Signature
此 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.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
protected static final int UNINITIALIZED
protected static final int SIGN
protected static final int VERIFY
protected int state
构造方法详细信息 |
---|
protected Signature(String algorithm)
algorithm
- 算法的标准字符串名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
方法详细信息 |
---|
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
此方法从首选的提供者开始遍历已注册安全提供者列表。返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自第一个支持指定算法的 Provider。
注意,可以通 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
NoSuchAlgorithmException
- 如果没有 Provider 支持指定算法的 Signature 实现。
Provider
public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定提供者。指定的提供者必须在安全提供者列表中注册。
注意,可以通过 Security.getProviders()
方法获取已注册提供者列表。
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者的名称。
NoSuchAlgorithmException
- 如果指定算法的 SignatureSpi 实现不能从指定提供者获得。
NoSuchProviderException
- 如果指定提供者未在安全提供者列表中注册。
IllegalArgumentException
- 如果提供者的名称为 null 或空。
Provider
public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回封装 SignatureSpi 实现的新 Signature 对象,该实现取自指定 Provider 对象。注意,指定 Provider 对象无需在提供者列表中注册。
algorithm
- 所请求算法的标准名称。有关标准算法名称的信息,请参阅
Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider
- 提供者。
NoSuchAlgorithmException
- 如果指定算法的 SignatureSpi 实现不能从指定提供者对象获得。
IllegalArgumentException
- 如果 provider 为 null。
Provider
public final Provider getProvider()
public final void initVerify(PublicKey publicKey) throws InvalidKeyException
publicKey
- 将验证其签名的标识的公钥。
InvalidKeyException
- 如果密钥无效。
public final void initVerify(Certificate certificate) throws InvalidKeyException
如果证书是 X.509 类型且具有标记为重要的 key usage 扩展字段,并且 key usage 扩展字段的值暗示着证书中的公钥及其对应的私钥不允许用于数字签名,则抛出 InvalidKeyException
。
certificate
- 将验证其签名的标识的证书。
InvalidKeyException
- 如果证书中的公钥未被正确解码,或者未包括所请求的参数信息,或者不能用于数字签名。
public final void initSign(PrivateKey privateKey) throws InvalidKeyException
privateKey
- 将生成其签名的标识的私钥。
InvalidKeyException
- 如果密钥无效。
public final void initSign(PrivateKey privateKey, SecureRandom random) throws InvalidKeyException
privateKey
- 将生成其签名的标识的私钥。
random
- 此签名的随机源。
InvalidKeyException
- 如果密钥无效。
public final byte[] sign() throws SignatureException
对此方法的调用将把此签名对象重新设置到以前为进行签名而通过调用 initSign(PrivateKey)
对其初始化时的状态。也就是说,如果需要,通过重新调用 update
和 sign
,可重新设置对象,并且可以通过它从同一个签署者中生成其他人的签名。
SignatureException
- 如果此签名对象未得到正确初始化,或者此签名算法不能处理所提供的输入数据。
public final int sign(byte[] outbuf, int offset, int len) throws SignatureException
offset
开始,将得到的签名字节存储在提供的缓冲区
outbuf
中。签名的格式取决于基础签名方案。
此签名对象将被重新设置到其初始状态(对其中的一种 initSign
方法调用之后所处的状态),并且可重新使用此签名对象,用同一个私钥生成将来的签名。
outbuf
- 输出签名结果的缓冲区。
offset
- 到存储签名的
outbuf
的偏移量。
len
-
outbuf
中分配给签名的字节数。
outbuf
中的字节数。
SignatureException
- 如果此签名对象未得到正确初始化,如果此签名算法无法处理所提供的输入数据,或者
len
少于实际签名长度。
public final boolean verify(byte[] signature) throws SignatureException
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用 initVerify(PublicKey)
对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用 initVerify
时其公钥所指定的标识中的其他签名。
signature
- 要验证的签名字节。
SignatureException
- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或类型错误,如果此签名算法不能处理所提供的输入数据等。
public final boolean verify(byte[] signature, int offset, int length) throws SignatureException
对此方法的调用将把此签名对象重新设置到以前为进行验证而通过调用 initVerify(PublicKey)
对其初始化时的状态。也就是说,该对象将被重新设置,并且可以用来验证调用 initVerify
时其公钥所指定的标识中的其他签名。
signature
- 要验证的签名字节。
offset
- byte 数组中起始处的偏移量。
length
- 要使用的字节数(从偏移量起始处算起)。
SignatureException
- 如果此签名对象未得到正确初始化,传入的签名未得到正确解码,或者类型错误,如果此签名算法无法处理所提供的输入数据等。
IllegalArgumentException
- 如果
signature
byte 数组为 null,或者
offset
或
length
小于 0,或者
offset
与
length
的和大于
signature
byte 数组的长度。
public final void update(byte b) throws SignatureException
b
- 用于更新的字节。
SignatureException
- 如果此签名对象未得到正确初始化。
public final void update(byte[] data) throws SignatureException
data
- 用于更新的 byte 数组。
SignatureException
- 如果此签名对象未得到正确初始化。
public final void update(byte[] data, int off, int len) throws SignatureException
data
- byte 数组。
off
- 到 byte 数组开始处的偏移量。
len
- 要使用的字节数,从偏移量起始处算起。
SignatureException
- 如果此签名对象未得到正确初始化。
public final void update(ByteBuffer data) throws SignatureException
data.position()
处开始的
data.remaining()
字节。返回时,缓冲区的位置将等于其限制;其限制并未改变。
data
- ByteBuffer
SignatureException
- 如果此签名对象未得到正确初始化。
public final String getAlgorithm()
public String toString()
@Deprecated public final void setParameter(String param, Object value) throws InvalidParameterException
setParameter
取代。
param
- 参数的字符串标示符。
value
- 参数值。
InvalidParameterException
- 如果
param
是此算法引擎的无效参数,或者已经设置参数并且不能重新设置,或者出现了安全异常等等。
getParameter(java.lang.String)
public final void setParameter(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException
params
- 参数
InvalidAlgorithmParameterException
- 如果给定的参数不适合此签名引擎
getParameters()
public final AlgorithmParameters getParameters()
返回的参数可能与用来初始化此签名的参数相同;如果此签名需要算法参数但却未使用任何参数进行初始化,则返回的参数可能会包含由底层签名实现所使用的默认值和随机生成的参数值的组合。
setParameter(AlgorithmParameterSpec)
@Deprecated public final Object getParameter(String param) throws InvalidParameterException
param
- 参数的字符串名称。
InvalidParameterException
- 如果
param
是此引擎的无效参数,或者尝试获取此参数时出现其他异常。
setParameter(String, Object)
public Object clone() throws CloneNotSupportedException
SignatureSpi
中的
clone
CloneNotSupportedException
- 如果调用一个不支持
Cloneable
的实现。
Cloneable