java.security

接口
异常
java.lang.Object
  继承者 java.security.SignatureSpi
      继承者 java.security.Signature

public abstract class Signature
     
extends SignatureSpi

此 Signature 类用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。

在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法指定为 SHA1withDSA。如果使用 RSA,对消息摘要算法则会有多种选择,因此,可以将签名算法指定为 MD2withRSAMD5withRSASHA1withRSA。因为没有默认的算法名称,所以必须为其指定名称。

Signature 对象可用来生成和验证数字签名。

使用 Signature 对象签名数据或验证签名包括以下三个阶段:

  1. 初始化,使用

  2. 更新

    根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。

  3. 签署或验证所有更新字节的签名。请参见 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) 对其初始化时的状态。也就是说,如果需要,通过重新调用 updatesign,可重新设置对象,并且可以通过它从同一个签署者中生成其他人的签名。

返回:
签名操作结果的签名字节。
抛出:
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,或者 offsetlength 小于 0,或者 offsetlength 的和大于 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