public abstract class Signature extends SignatureSpi
签名算法可以是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
类中定义的方法; 超类中的所有方法都适用于希望提供自己的数字签名算法实现的加密服务提供商。
Java平台的每个实现都需要支持以下标准的Signature
算法:
SHA1withDSA
SHA1withRSA
SHA256withRSA
Modifier and Type | Field and Description |
---|---|
protected static int |
SIGN
可能的
state 值,表示此签名对象已初始化以进行签名。
|
protected int |
state
此签名对象的当前状态。
|
protected static int |
UNINITIALIZED
可能
state 值,表示此签名对象还没有被初始化。
|
protected static int |
VERIFY
可能的
state 值,表示此签名对象已初始化以进行验证。
|
appRandom
Modifier | Constructor and Description |
---|---|
protected |
Signature(String algorithm)
为指定的算法创建一个Signature对象。
|
Modifier and Type | Method and Description |
---|---|
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)
完成签名操作并将生成的签名字节存储在提供的缓冲器
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)
以指定的偏移量开始,以指定的字节数组验证传入签名。
|
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify
protected static final int UNINITIALIZED
state
值,表示此签名对象尚未初始化。
protected static final int SIGN
state
值,表示此签名对象已经初始化签名。
protected static final int VERIFY
state
值,表示此签名对象已经初始化验证。
protected int state
protected Signature(String algorithm)
algorithm
- algorithm
的标准字符串名称。
看到签名条Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装SignatureSpi实现的新Signature对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- algorithm
的标准名称。
看到签名条Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
NoSuchAlgorithmException
- 如果没有提供者支持指定算法的签名实现。
Provider
public static Signature getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回从指定提供程序封装SignatureSpi实现的新Signature对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
algorithm
- algorithm
的名称。
看到签名条Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供者的名称。
NoSuchAlgorithmException
- 如果指定算法的SignatureSpi实现不能从指定的提供者获得。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果提供者名称为空或为空。
Provider
public static Signature getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装SignatureSpi实现的新Signature对象。 请注意,指定的Provider对象不必在提供者列表中注册。
algorithm
- algorithm
的名称。
看到签名条Java Cryptography Architecture Standard Algorithm Name Documentation有关标准算法名称的信息。
provider
- 提供商。
NoSuchAlgorithmException
- 如果指定的算法的SignatureSpi实现从指定的Provider对象中不可用。
IllegalArgumentException
- 如果提供者为空。
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,并且密钥使用扩展字段标记为关键,并且密钥使用扩展字段的值意味着证书中的公钥及其相应的私钥不应该用于数字签名,一个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)
通过调用initSign(PrivateKey)进行初始化以进行签名时的状态。 也就是说,如果需要,通过对update
和sign
新调用,对象被重置并可用于从同一签名者生成另一个签名。
SignatureException
- 如果此签名对象未正确初始化,或者该签名算法是否无法处理提供的输入数据。
public final int sign(byte[] outbuf, int offset, int len) throws SignatureException
outbuf
,从offset
开始。
签名的格式取决于底层签名方案。
该签名对象被重置为其初始状态(在调用initSign
方法之一后的状态),并且可以重用以使用相同的私钥生成进一步的签名。
outbuf
- 签名结果的缓冲区。
offset
- 偏移到
outbuf
,其中存储签名。
len
-中的字节数
outbuf
分配给签名。
outbuf
的字节数。
SignatureException
- 如果此签名对象未正确初始化,则该签名算法无法处理提供的输入数据,或者如果
len
小于实际签名长度。
public final boolean verify(byte[] signature) throws SignatureException
对此方法的调用重置该签名对象到它是当先前经由到呼叫初始化核查在状态initVerify(PublicKey)
。 也就是说,对象被重置并且可用于从在initVerify的调用中initVerify
了公钥的身份验证另一个initVerify
。
signature
- 要验证的签名字节。
SignatureException
- 如果此签名对象未正确初始化,则如果此签名算法无法处理提供的输入数据,则传入签名不正确地编码或错误类型。
public final boolean verify(byte[] signature, int offset, int length) throws SignatureException
调用此方法将此签名对象重置为先前通过调用initVerify(PublicKey)进行初始化initVerify(PublicKey)
。 也就是说,对象被重置并且可用于从在initVerify的调用中initVerify
了公钥的身份验证另一个initVerify
。
signature
- 要验证的签名字节。
offset
- 从字节数组开始的偏移量。
length
- 从偏移开始使用的字节数。
SignatureException
- 如果此签名对象未正确初始化,则如果此签名算法无法处理提供的输入数据,则传入签名不正确地编码或错误类型。
IllegalArgumentException
- 如果
signature
字节数组为空,或者
offset
或
length
小于0,或者
offset
和
length
和大于
signature
字节数组的长度。
public final void update(byte b) throws SignatureException
b
- 用于更新的字节。
SignatureException
- 如果此签名对象未正确初始化。
public final void update(byte[] data) throws SignatureException
data
- 用于更新的字节数组。
SignatureException
- 如果此签名对象未正确初始化。
public final void update(byte[] data, int off, int len) throws SignatureException
data
- 字节数组。
off
- 从字节数组开始的偏移量。
len
- 从偏移量开始使用的字节数。
SignatureException
- 如果此签名对象未正确初始化。
public final void update(ByteBuffer data) throws SignatureException
data.remaining()
起始处的字节data.position()
。
返回时,缓冲区的位置将等于其限制;
其限制将不会改变。
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
clone
在
SignatureSpi
CloneNotSupportedException
- 如果这个调用不支持
Cloneable
。
Cloneable