- 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的情况下,存在对消息多个选择摘要算法,所以签名算法可被指定为,例如,MD2withRSA
,MD5withRSA
,或SHA1withRSA
。 必须指定算法名称,因为没有默认值。Signature对象可用于生成和验证数字签名。
Signature对象用于签名数据或验证签名有三个阶段:
- 初始化,或者
- 一个公钥,用于初始化签名以进行验证(见
initVerify
)或 - 私钥(和可选的安全随机数生成器),用于初始化签名签名(见
initSign(PrivateKey)
和initSign(PrivateKey, SecureRandom)
)。
- 一个公钥,用于初始化签名以进行验证(见
- 更新
根据初始化的类型,这将更新要签名或验证的字节。 请参阅
update
方法。 - 在所有更新的字节上签名或验证签名。 参见
sign
方法和verify
方法。
注意,这个类是抽象的,由于历史原因而从
SignatureSpi
延伸。 应用程序开发人员只应注意本Signature
课程中定义的方法; 超类中的所有方法都适用于希望提供自己的数字签名算法实现的加密服务提供商。Java平台的每个实现都需要支持以下标准的
Signature
算法:-
SHA1withDSA
-
SHA256withDSA
-
SHA1withRSA
-
SHA256withRSA
- 从以下版本开始:
- 1.1
- 初始化,或者
-
-
Field Summary
Fields Modifier and Type Field 描述 protected static int
SIGN
可能的值为state
,表示此签名对象已初始化以进行签名。protected int
state
此签名对象的当前状态。protected static int
UNINITIALIZED
可能的值为state
,表示此签名对象尚未初始化。protected static int
VERIFY
可能的值为state
,表示此签名对象已初始化以进行验证。-
Fields inherited from class java.security.SignatureSpi
appRandom
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 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)
以指定的偏移量开始,以指定的字节数组验证传入签名。-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.security.SignatureSpi
engineGetParameter, engineGetParameters, engineInitSign, engineInitSign, engineInitVerify, engineSetParameter, engineSetParameter, engineSign, engineSign, engineUpdate, engineUpdate, engineUpdate, engineVerify, engineVerify
-
-
-
-
字段详细信息
-
UNINITIALIZED
protected static final int UNINITIALIZED
可能的值为state
,表示此签名对象尚未初始化。- 另请参见:
- Constant Field Values
-
SIGN
protected static final int SIGN
可能的值为state
,表示此签名对象已初始化以进行签名。- 另请参见:
- Constant Field Values
-
VERIFY
protected static final int VERIFY
可能的值为state
,表示此签名对象已初始化以进行验证。- 另请参见:
- Constant Field Values
-
state
protected int state
此签名对象的当前状态。
-
-
构造方法详细信息
-
Signature
protected Signature(String algorithm)
为指定的算法创建一个Signature对象。- 参数
-
algorithm
- 算法的标准字符串名称。 有关标准算法名称的信息,请参阅Java Security Standard Algorithm Names Specification中的“签名”部分。
-
-
方法详细信息
-
getInstance
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
返回实现指定签名算法的Signature对象。此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装SignatureSpi实现的新Signature对象。
请注意,注册提供商的列表可以通过
Security.getProviders()
方法检索。- Implementation Note:
-
JDK参考实现另外使用
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对象。返回从指定提供程序封装SignatureSpi实现的新Signature对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过
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对象。返回从指定的Provider对象封装SignatureSpi实现的新Signature对象。 请注意,指定的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
- 要验证的签名字节。 - 结果
- 如果签名被验证,则为真,否则为false。
- 异常
-
SignatureException
- 如果此签名对象未正确初始化,则传入的签名不正确编码或错误类型,如果此签名算法无法处理提供的输入数据等。
-
verify
public final boolean verify(byte[] signature, int offset, int length) throws SignatureException
以指定的偏移量开始,以指定的字节数组验证传入签名。调用此方法将此签名对象重置为先前初始化以通过调用
initVerify(PublicKey)
进行验证的initVerify(PublicKey)
。 也就是说,对象被重置并且可用于从在initVerify
的调用中指定了公钥的身份验证另一个签名。- 参数
-
signature
- 要验证的签名字节。 -
offset
- 从字节数组开始的偏移量。 -
length
- 从偏移开始使用的字节数。 - 结果
- 如果签名被验证,则为真,否则为false。
- 异常
-
SignatureException
- 如果该签名对象未被正确初始化,则如果该签名算法无法处理提供的输入数据,则传入的签名被错误地编码或错误的类型。 -
IllegalArgumentException
- 如果signature
字节数组为空,或者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
- 从偏移开始使用的字节数。 - 异常
-
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
已过时。 使用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
如果实现是可克隆的,则返回克隆。- 重写:
-
clone
在SignatureSpi
- 结果
- 一个克隆,如果实现是可克隆的。
- 异常
-
CloneNotSupportedException
- 如果在不支持Cloneable
的实现上调用此方法。 - 另请参见:
-
Cloneable
-
-